问题描述
- 关于oracle 同一行数据 两个时间段数据语句问题
-
各位好,目前对一个旧系统改造,从sql 改造为 orcle时,遇到了一个问题,原先的sql语句select Count(*) from yd where (BeginDate + BeginTime<=(('2015-01-28')+('10:00:00'))) and (EndDate + EndTime>(('2015-01-28')+('10:00:00'))) and (zyID='32') 时是可以查出来语句的,但是改为oracle时,语句如下
select Count(*) from yd where to_date(BeginDate || ' '|| BeginTime,'YYYY-MM-DD HH24:MI:SS') >=to_date('2015-01-28' || ' ' || '10:00:00','YYYY-MM-DD HH24:MI:SS') and to_date(EndDate || ' '|| EndTime,'YYYY-MM-DD HH24:MI:SS')< to_date('2015-01-28' || ' ' || '10:00:00','YYYY-MM-DD HH24:MI:SS') and (zyID='32')
却选不出来数据,请问是什么原因呢,!
表结构如下(http://img.ask.csdn.net/upload/201502/27/1425045166_710236.png)
解决方案
参考How to concatenate time to a date
你的BEGINDATE, ENDDATE, BEGINTIME, ENDTIME都是什么类型的?如果不是字符型的,试一下先用to_char把日期和时间字段转换成字符,然后使用||来链接字符
另外你的zyID是字符类型还是整型的,如果是整型的,应该不需要引号。
解决方案二:
前后两句的SQL不是等价的。
第一句中,是开始时间<=,结束时间>
后面一句是开始时间>= 结束时间<
按照截图两个语句是查不出来的。估计你第一个语句查到的记录不是这一条。
第二条语句的记录只有开始和结束时间都是2015-01-28 10:00:00 才满足要求。
解决方案三:
大于号小于号,弄反了
时间: 2024-08-01 10:44:21