日期之间的 Oracle sysdate 范围与文字日期范围
Oracle between dates sysdate range vs literal date range
情况如下:
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
这是一个事件日志,行带有日期标记(前几天的行数是静态的)。
我的问题 - 为什么计数不一样?我错过了什么?这两个范围之间是否存在语义差异?
SYSDATE
是 returns 日期和时间组件的函数。如果你不 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) ;
情况如下:
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
这是一个事件日志,行带有日期标记(前几天的行数是静态的)。
我的问题 - 为什么计数不一样?我错过了什么?这两个范围之间是否存在语义差异?
SYSDATE
是 returns 日期和时间组件的函数。如果你不 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) ;