我有一个简单的查询来过滤掉今天的due_date
值。
SELECT *
FROM ORDER
WHERE DUE_DATE = CURRENT_DATE AND
ROWNUM <= 10
ORDER BY DUE_DATE ASC
然而,即使我有一堆订单到期日为今天,查询实际上返回0行。
为什么?提前谢谢。
抱歉,我忘记提及DUE_DATE类型为Date
答案 0 :(得分: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)上添加一个基于函数的索引,在这种情况下,两者都可能表现得同样好。
分享并享受。
答案 1 :(得分:0)
CURRENT_DATE包含月,日和年。截止日期可能还包括小时,分钟,秒。如果是这样,您应该在进行比较时截断日期。