美文网首页
TO_DATE()选择日期范围

TO_DATE()选择日期范围

作者: DreamOver | 来源:发表于2016-04-10 22:46 被阅读2124次

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

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

    我们先来准备一些数据:


    数据准备

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

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

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

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

      大于等于号_年月日_2.JPG
      大于号_年月日_2.JPG
      这两个语句执行结果一样,都包含4月9日的数据。
    • 使用小于号和小于等于号都相当于 <

      小于等于号_年月日_2.JPG
      小于号_年月日_2.JPG
      这两个语句执行结果一样,都不包含4月9日的数据。

    但!是!当数据集中包含 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 是在零点准时执行的,如果不注意,则会漏掉很多数据。

    相关文章

      网友评论

          本文标题:TO_DATE()选择日期范围

          本文链接:https://www.haomeiwen.com/subject/srhblttx.html