我有一個簡單的查詢來過濾出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
我有一個簡單的查詢來過濾出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
你需要或者截斷你的日期,如
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)上添加一個基於函數的索引,在這種情況下,任何一個都可能執行得很好。
分享和享受。
CURRENT_DATE包含月份,日期和年份。您的截止日期可能包含小時,分鐘,秒鐘。如果是這樣,那麼在進行比較時應該截斷日期。
如果您執行'SELECT CURRENT_DATE FROM DUAL',則會注意到CURRENT_DATE還包含小時,分鐘和秒。 – 2012-08-10 16:35:29
是的,基本上你需要以相同的數據表示來比較日期。 – 2012-08-10 16:55:42
很好的答案,謝謝! – Dreamer 2012-08-10 18:11:00