当我们在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
不过,如果我们认识到当查询的时间精度为年月日时,查询操作会自动在日期后面加上 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 是在零点准时执行的,如果不注意,则会漏掉很多数据。
网友评论