Oracle CURRENT_DATE在查询中不起作用

时间:2012-08-10 16:24:21

标签: sql oracle

我有一个简单的查询来过滤掉今天的due_date值。

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

然而,即使我有一堆订单到期日为今天,查询实际上返回0行。

为什么?提前谢谢。

抱歉,我忘记提及DUE_DATE类型为Date

2 个答案:

答案 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包含月,日和年。截止日期可能还包括小时,分钟,秒。如果是这样,您应该在进行比较时截断日期。