日期:2014-05-17  浏览次数:20462 次

关于数据库如何将两个时间区间的比较
假设我数据库有SelectedMan表,其中有字段promulgateTime,还有个DateDiffTime字段。
promulgateTime相当是起始时间,DateDiffTime是截至时间。

然后从外部获取到一个时间区间,假设 2012/11/23 和 2012/11/26

用语句如何查出select * from SelectedMan where
promulgateTime ~ DateDiffTime 不再这 2012/11/23 ~ 2012/11/26
区间里的数据?
------最佳解决方案--------------------
select * from SelectedMan where promulgateTime <'2012-11-23' or DateDiffTime >'2012-11-26'


???
------其他解决方案--------------------

select 
    * from SelectedMan where promulgateTime  not between '2012/11/23' and '2012/11/26'
        or DateDiffTime   not between '2012/11/23' and '2012/11/26'
这样可能不全对  貌似你是说的这两个时间区间没有交集?

------其他解决方案--------------------
--如果说一个是开始时间  一个是结束时间 那么promulgateTime必定大于DateDiffTime
select * from SelectedMan 
where promulgateTime>'2012/11/26' or DateDiffTime<'2012/11/23'
--从数学集合上说  这样可以保证没有交集

------其他解决方案--------------------
引用:
貌似还是有交集啊3楼的代码我没看懂啊,
promulgateTime相当是开始时间,DateDiffTime是结束时间
promulgateTime只会在DateDiffTime之前,就是比它小啊
所以3楼代码没看懂


你想想看  你给出的是一个区间 叫A区间吧  然后你的开始时间和结束时间又可以构成一个区间 叫B区间吧
要这两个区间没有交集  是不是只需B区间的开始值大于A区间的结束值  或者B区间的结束值  小于A区间的开始值  用数学的话说  就是最小值大于最大值  最大值小于最小值  这个就可以恒成立
------其他解决方案--------------------
是,我要的就是两个没有集合没有交集的数据,把有交集的数据筛选掉
------其他解决方案--------------------
貌似还是有交集啊3楼的代码我没看懂啊,
promulgateTime相当是开始时间,DateDiffTime是结束时间
promulgateTime只会在DateDiffTime之前,就是比它小啊
所以3楼代码没看懂