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

benluobo 2012-05-07 03:51:15
SELECT count(*) FROM Alert where '2012-04-30'<= firstTime

上面的语句执行没有问题


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

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



请问这是为什么
...全文
121 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
benluobo 2012-05-07
  • 打赏
  • 举报
回复
恩 一起犯错 一起进步
coolkisses 2012-05-07
  • 打赏
  • 举报
回复
很奇怪的语法,不过,倒也说明了oracle的自行处理逻辑。
这种错,别人还真不太好犯,希望楼主多多犯错,让大家多多学习。
  • 打赏
  • 举报
回复
我在想 一个时间类型和 '2012-04-30'这个比较不会报错么?

'2012-04-30'不会自动转换成时间类型 应该会报错日期无效吧
小灰狼W 2012-05-07
  • 打赏
  • 举报
回复
表达式的两边,一边是字符串,一边是时间类型,不能直接比较。如果看执行计划,你就可以看到进行了什么样的隐式转换了
隐式转换使用了如下的时间格式
select * from nls_session_parameters where parameter='NLS_DATE_FORMAT';
很明显,你用的字符串格式和它不一致
benluobo 2012-05-07
  • 打赏
  • 举报
回复
楼上的方法是可以


但我的疑问是 为什么直接比较时不能有2个条件

可以试试当有一个条件的时候也是没有问题的
  • 打赏
  • 举报
回复
这样呢?

SELECT count(*) FROM Alert where date'2012-04-30'<= firstTime and firstTime <= date'2012-05-07'
benluobo 2012-05-07
  • 打赏
  • 举报
回复
timestamp 类型
benluobo 2012-05-07
  • 打赏
  • 举报
回复
timestamp 类型
benluobo 2012-05-07
  • 打赏
  • 举报
回复
timestamp 类型
害虫也有爱 2012-05-07
  • 打赏
  • 举报
回复
select 1 from dual where to_date(20120430,'yyyymmdd')<=sysdate and sysdate<=to_date(20120508,'yyyymmdd');

亲测这句SQL语法是没有问题的,楼主可以把测试数据整理一下发上来吗?
  • 打赏
  • 举报
回复
firstTime什么类型?
benluobo 2012-05-07
  • 打赏
  • 举报
回复
求高手@!!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧