Oracle日期之间的日期sysdate范围与文字日期范围

时间:2019-04-30 21:05:35

标签: oracle range literals between sysdate

这里是情况:

select sysdate from dual ;

>  30-APR-19

SELECT
  count(*)
FROM 
  event_log
WHERE
  edate between to_date('04232019', 'MMDDYYYY') and to_date('04292019', 'MMDDYYYY') ;

> 1156

SELECT
  count(*)
FROM 
  event_log
WHERE
  edate between (sysdate-7) and (sysdate-1) ;

> 1276

这是一个事件日志,行标有日期(前几天的行数是静态的)。

我的问题-为什么计数不一样?我想念什么?这两个范围之间在语义上有区别吗?

1 个答案:

答案 0 :(得分:2)

SYSDATE是一个返回日期和时间部分的函数。如果您不TRUNC食用它,您将同时获得:

SQL> select sysdate,
  2         sysdate - 7 prev_week,
  3         sysdate - 1 yesterday
  4  from dual;

SYSDATE             PREV_WEEK           YESTERDAY
------------------- ------------------- -------------------
30.04.2019 23:13:14 23.04.2019 23:13:14 29.04.2019 23:13:14

SQL>

如果您TRUNC吃了它,那么您将获得午夜:

SQL> select trunc(sysdate) today,
  2         trunc(sysdate - 7) prev_week,
  3         trunc(sysdate - 1) yesterday
  4  from dual;

TODAY               PREV_WEEK           YESTERDAY
------------------- ------------------- -------------------
30.04.2019 00:00:00 23.04.2019 00:00:00 29.04.2019 00:00:00

SQL>

这意味着您的最后一个条件应该是

where edate between trunc(sysdate-7) and trunc(sysdate-1) ;