TO_DATE()选择日期范围

2016-04-10  本文已影响2124人  DreamOver

当我们在Oracle数据库中使用 TO_DATE() 函数选择一个日期范围时

另,Oracle中默认一天的开始时间为 00:00:01,而00:00:00 仍然算作前一天。

我们先来准备一些数据:


数据准备

1、当 TO_DATE() 中的时间格式精确到时分秒时,一切如我们所想

大于等于号.JPG
大于号.JPG
小于等于号.JPG
小于号.JPG

2、当 TO_DATE() 中的时间格式只精确到年月日

但!是!当数据集中包含 00:00:00(关于零点这个特殊情况,请看另一篇文章PL/SQL时间格式-零点)这个时间时,情况就变了!

小于等于号_年月日.JPG
小于号_年月日.JPG
大于号_年月日.JPG
大于等于号_年月日.JPG
不过,如果我们认识到当查询的时间精度为年月日时,查询操作会自动在日期后面加上 00:00:00 这个时间时,一切都解释得通了!
当我们执行下面这个语句时
SELECT *
  FROM SIEBEL.TEM_INFO T
 WHERE T.ACC_ID >= TO_DATE('20160409', 'YYYYMMDD');

其实相当于执行了

SELECT *
  FROM SIEBEL.TEM_INFO T
 WHERE T.ACC_ID >= TO_DATE('20160409 00:00:00', 'YYYYMMDD HH24:MI:SS');

在SQL的优化中,我们都知道“>=”和“<=”的是比“>”和“<”的效率高的,但是在使用“>=”和“<=”用于日期查询时,我们应当特别注意零点这个特殊值,因为在实际应用中,会有很多 Job 是在零点准时执行的,如果不注意,则会漏掉很多数据。

上一篇下一篇

猜你喜欢

热点阅读