Oracle CURRENT_DATE在查询中不起作用

Dre*_*mer 0 sql oracle

我有一个简单的查询来过滤掉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

Bob*_*ica 5

您需要截断日期,如下所示

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)上添加基于函数的索引,在这种情况下,两者都可能表现得同样好.

分享和享受.