我有一个简单的查询来过滤掉due_date今天的价值.
SELECT *
FROM ORDER
WHERE DUE_DATE = CURRENT_DATE AND
ROWNUM <= 10
ORDER BY DUE_DATE ASC
Run Code Online (Sandbox Code Playgroud)
但是,即使我有一堆订单到期日为今天,查询实际上返回0行.
怎么会?提前致谢.
对不起,我忘了提及DUE_DATE类型 Date
您需要截断日期,如下所示
SELECT *
FROM ORDER
WHERE TRUNC(DUE_DATE) = TRUNC(CURRENT_DATE) AND
ROWNUM <= 10
ORDER BY DUE_DATE ASC
Run Code Online (Sandbox Code Playgroud)
或使用远程比较,如
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
Run Code Online (Sandbox Code Playgroud)
后一个示例可能表现更好,因为可以使用索引(假设您在DUE_DATE上有索引).当然,您还可以在TRUNC(DUE_DATE)上添加基于函数的索引,在这种情况下,两者都可能表现得同样好.
分享和享受.