日期:2014-05-17 浏览次数:20800 次
select count(*) from tableName t where (to_date('2012-08-19','yyyy-mm-dd') not between t.startdate and t.enddate) and (to_date('2012-09-20','yyyy-mm-dd') not between t.startdate and t.enddate) and (t.startdate not between to_date('2012-08-19','yyyy-mm-dd') and to_date('2012-09-20','yyyy-mm-dd'));
------解决方案--------------------
昨天没看清题。
似乎是要更新有效期,新的有效期不能和旧的有效期重复,下面这个也可以吧(前提是数据库里面的enddate>startdate):
select × from tablename t
where to_date('2012-08-19','yyyy-mm-dd')< to_date('2012-09-20','yyyy-mm-dd')
and (to_date('2012-08-19','yyyy-mm-dd') > t.enddate
or to_date('2012-09-20','yyyy-mm-dd') < t.startdate)
如果新的有效期不能比旧的有效期旧,可以把最后一行的 or 去掉。