请教一个查询SQL的问题

roadman 2003-08-25 02:49:32
想查询某个时间段的记录数:
select count(*)
from LOG_DATA
where
BEGINTIME>'1970-01-01 08:00:00' and ENDTIME>'1970-01-01 08:00:00'
and (to_date(ENDTIME,'yyyy-mm-dd hh24:mi:ss')-to_date(BEGINTIME,'yyyy-mm-dd hh24:mi:ss'))*24*3600<=10;
当BEGINTIME或者ENDTIME有'0000-00-00 00:00:00'时会报错:
ERROR:
ORA-01843: 无效的月份
但是我已经在前面做了限制
BEGINTIME>'1970-01-01 08:00:00' and ENDTIME>'1970-01-01 08:00:00'
难道当前面的条件不满足,Oracle还要搜索后面的条件吗?奇怪!
请教各位有没有解决的办法呢?谢谢!
...全文
72 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2003-08-25
  • 打赏
  • 举报
回复
SQL> select to_date('0000-00-00 00:00:00','yyyy-mm-dd hh24:mi:ss') from dual;

select to_date('0000-00-00 00:00:00','yyyy-mm-dd hh24:mi:ss') from dual

ORA-01843: 无效的月份

楼主现在知道了吧,oracle没有这种日期数据,当把它转为日期型就会报错,还是在你的程序中改良吧
roadman 2003-08-25
  • 打赏
  • 举报
回复
BEGINTIME,ENDtime不会出现NULL的情况。
BEGINTIME,ENDTIME是由程序写进数据库的,它们的类型都是varchar2(19),not null。
当一个程序执行一个操作失败时,ENDTIME的值就是'0000-00-00 00:00:00'.
onejune4450 2003-08-25
  • 打赏
  • 举报
回复
如果'0000-00-00 00:00:00' 不是用sqlplus 列出来的,可能BEGINTIME,ENDtime 是Null值,需要用nvl(....,'1900-01-01 00:00:00')转换一下。
zjhclf 2003-08-25
  • 打赏
  • 举报
回复
把前面的限制条件也用to_char或to_date转换为同一类型再比较.试试看,呵呵

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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