Oracle中的日期间查询

在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小时制表示。

 

posted @ 2014-07-07 16:05  陈树义  阅读(1430)  评论(0编辑  收藏  举报