在Oracle中,如果要进行日期间的查询需要用到Oracle的内置函数to_date()。
1、Oracle日期查询的边界问题
此外,日期间的查询还涉及一个边界问题,因为每个人的思维方式不同,因此写出的语句都不同。
比如如果要查询2014年7月1日到2014年7月6日的数据:
1 select * from test
2 where intime >= to_date('2010-07-01', 'yyyy-mm-dd');
3 and intime < to_date('2010-07-06', 'yyyy-mm-dd') + 1;
这时候的查询语句可以查到7月1日到7月6日的数据,并且是包括了7月1日和7月6日这两天当天的数据的。
但如果你忘记写了第2行的等于号了,那么如果一条记录的时间刚好是7月1日凌晨00:00分插入的,那么这条数据也就查不出来。
但实际上这条数据是7月1日的数据,应该被查询出来。
而在第3行中,如果你忘记在后边+1,那么程序就认为你查询的是比“2010-07-06 00:00:00”这个时间小的记录,那么7月6号当天的是数据就查不出来了。
所以为了避免这种情况的发生,如果查询的日期是包含边界的话,那么:开始日期符号要等于,结束日期要+1。
2、Oracle的时间格式化字符串的格式
如果你想要查询7月5日中午12点钱的数据,你应该这样写:
1 select * from test
2 where intime < to_date('2014-07-05 12:00:00', 'yyyy-mm-dd hh24:mi:ss');
因为Oracle是不区分大小写的,所以如果你在第2行的to_date函数中把日期格式写成:'yyyy-MM-dd HH24:mm:ss',Oracle会报错:格式代码出现两次。
因为对于Oracle来说,MM与mm是一样的。所以,Oracle中日期的格式化字符串应该是这样的:“yyyy-mm-dd hh24:mi:ss”。
其中hh24表示24小时制表示,如果要换成12小时制,则换成“hh12”即可。
而在MySQL的SQL查询中,日期格式是这样写的“yyyy-MM-dd HH:mm:ss",其中大写的MM表示月、小写的mm表示分钟。
而大写的HH表示用24小时制表示,如果写成hh则表示用12小时制表示。