2012-08-10 90 views
0

我有一個簡單的查詢來過濾出due_date值是今天。Oracle CURRENT_DATE在查詢中不起作用

SELECT * 
    FROM ORDER 
    WHERE DUE_DATE = CURRENT_DATE AND 
     ROWNUM <= 10 
    ORDER BY DUE_DATE ASC 

但是,即使我今天有一堆訂單有截止日期,查詢實際上返回0行。

怎麼回事?提前致謝。

對不起,我忘了提DUE_DATE的類型爲Date

回答

5

你需要或者截斷你的日期,如

SELECT * 
    FROM ORDER 
    WHERE TRUNC(DUE_DATE) = TRUNC(CURRENT_DATE) AND 
     ROWNUM <= 10 
    ORDER BY DUE_DATE ASC 

或使用範圍比較,因爲在

SELECT * 
    FROM ORDER 
    WHERE DUE_DATE BETWEEN TRUNC(CURRENT_DATE) 
        AND TRUNC(CURRENT_DATE) + INTERVAL '1' DAY - INTERVAL '1' SECOND AND 
     ROWNUM <= 10 
    ORDER BY DUE_DATE ASC 

後一個例子可能會更好,因爲可以使用索引(假設您在DUE_DATE有一個索引)。當然,你也可以在TRUNC(DUE_DATE)上添加一個基於函數的索引,在這種情況下,任何一個都可能執行得很好。

分享和享受。

+0

很好的答案,謝謝! – Dreamer 2012-08-10 18:11:00

0

CURRENT_DATE包含月份,日期和年份。您的截止日期可能包含小時,分鐘,秒鐘。如果是這樣,那麼在進行比較時應該截斷日期。

+0

如果您執行'SELECT CURRENT_DATE FROM DUAL',則會注意到CURRENT_DATE還包含小時,分鐘和秒。 – 2012-08-10 16:35:29

+0

是的,基本上你需要以相同的數據表示來比較日期。 – 2012-08-10 16:55:42