当前位置: 代码迷 >> Oracle管理 >> 一个SQL比较日期的奇怪有关问题
  详细解决方案

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

热度:87   发布时间:2016-04-24 05:21:53.0
一个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的自行处理逻辑。
这种错,别人还真不太好犯,希望楼主多多犯错,让大家多多学习。
  相关解决方案