Oracle的Date型变量或字段,实际上除了日期,还包含了时间。在Oracle8i中,这个时间精确到秒。
一个日期值如果没有指定时间,就只代表那一天的0:00:00那一瞬间。如果不理解这一点,就很容易在日期比较时犯错误。
比如,要求查询2007-4-6到2007-4-10这5天的数据,新手程序员可能会这样写:
select ... from ... where proc_date>=to_date('20070406','yyyymmdd') and proc_date<=to_date('20070410','yyyymmdd')
实际上,这个查询对于2007-4-10这一天,只返回了0:00:00的数据,后面接近一整天的数据都没有返回。
正确的方法是:
select ... from ... where proc_date>=to_date('20070406','yyyymmdd') and proc_date< to_date('20070410','yyyymmdd')+1
即:小于2007-4-10第二天的凌晨0:00:00。