我有一个简单的查询来过滤出due_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 包含月、日和年。您的截止日期也可能包含小时、分钟、秒。如果是这样,您应该在进行比较时截断日期。