一个SQL比较日期的奇怪有关问题

一个SQL比较日期的奇怪问题SELECT count(*) FROM Alert where 2012-04-30 firstTime上面的语句执行没

一个SQL比较日期的奇怪问题
SELECT count(*) FROM Alert where '2012-04-30'<= firstTime

上面的语句执行没有问题


  SELECT count(*) FROM Alert where '2012-04-30'<= firstTime and firstTime <= '2012-05-07'

当多加一个条件的时候 报错 无效的月份 



请问这是为什么

[解决办法]
firstTime什么类型?
[解决办法]

SQL code
select 1 from dual where to_date(20120430,'yyyymmdd')<=sysdate and sysdate<=to_date(20120508,'yyyymmdd');
[解决办法]
这样呢?
SQL code
SELECT count(*) FROM Alert where date'2012-04-30'<= firstTime and firstTime <= date'2012-05-07'
[解决办法]
表达式的两边,一边是字符串,一边是时间类型,不能直接比较。如果看执行计划,你就可以看到进行了什么样的隐式转换了
隐式转换使用了如下的时间格式
select * from nls_session_parameters where parameter='NLS_DATE_FORMAT';
很明显,你用的字符串格式和它不一致
[解决办法]
我在想 一个时间类型和 '2012-04-30'这个比较不会报错么?

'2012-04-30'不会自动转换成时间类型 应该会报错日期无效吧
[解决办法]
很奇怪的语法,不过,倒也说明了oracle的自行处理逻辑。
这种错,别人还真不太好犯,希望楼主多多犯错,让大家多多学习。