oracle 奇怪的问题

select 1 from  dual where '2010-05-05' between '2010-05-05' and '2010-05-05'

 

   上面这句sql能查询出结果。

 

select 1 from  dual where '2010-05-05' between '2010-05-05 00:00:00' and '2010-05-05 23:59:59'

   而这句SQL就查询不出结果。

 

   这是什么原因?

 

如果想比较字符的话,结果是正确的,第二条语句就应该没结果。 如果阁下想比较日期的话,就要用TO_DATE()将字符串转换成Date类型才行

因为'2010-05-05'<'2010-05-05 00:00:00'

select 1 from dual where '2010-05-05' between '2010-05-06' and '2010-05-04'

这样也出不来

'2010-05-05' 这里人为只是一个字符

between A and B 这里认为是 A 或 B

select 1 from dual where '2010-05-05 00:00:00' between '2010-05-05 00:00:00' and '2010-05-05 23:59:59'

这样就出来了

兄弟用的字符比较。使用如下SQL就没有问题,将字符转为日期类型。
select 1 from dual
where to_date('2010-05-05', 'yyyy-mm-dd')
between to_date('2010-05-05 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and to_date('2010-05-05 23:59:59', 'yyyy-mm-dd hh24:mi:ss')