TO_DATE()选择日期范围

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

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

我们先来准备一些数据:


TO_DATE()选择日期范围_第1张图片
数据准备

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

TO_DATE()选择日期范围_第2张图片
大于等于号.JPG

TO_DATE()选择日期范围_第3张图片
大于号.JPG

TO_DATE()选择日期范围_第4张图片
小于等于号.JPG

TO_DATE()选择日期范围_第5张图片
小于号.JPG

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

  • 使用大于号和大于等于号都相当于 >=

    TO_DATE()选择日期范围_第6张图片
    大于等于号_年月日_2.JPG

    TO_DATE()选择日期范围_第7张图片
    大于号_年月日_2.JPG

    这两个语句执行结果一样,都包含4月9日的数据。

  • 使用小于号和小于等于号都相当于 <

    TO_DATE()选择日期范围_第8张图片
    小于等于号_年月日_2.JPG

    TO_DATE()选择日期范围_第9张图片
    小于号_年月日_2.JPG

    这两个语句执行结果一样,都不包含4月9日的数据。

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

TO_DATE()选择日期范围_第10张图片
小于等于号_年月日.JPG

TO_DATE()选择日期范围_第11张图片
小于号_年月日.JPG

TO_DATE()选择日期范围_第12张图片
大于号_年月日.JPG

TO_DATE()选择日期范围_第13张图片
大于等于号_年月日.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 是在零点准时执行的,如果不注意,则会漏掉很多数据。

你可能感兴趣的:(TO_DATE()选择日期范围)