当前位置: 代码迷 >> Sql Server >> 某个时间段是否在某个时间段里解决方案
  详细解决方案

某个时间段是否在某个时间段里解决方案

热度:37   发布时间:2016-04-24 10:13:56.0
某个时间段是否在某个时间段里
我数据库有有两个字段开始时间beginTime跟endTime

现在我外面有两个输入框,也是开始时间跟结束时间

比如数据库开始时间是2014-06-03 12:00,结束时间是2014-07-03 12:00

如果我的文本框的开始时间是2014-03-03 12:00,结束时间是2014-06-10 12:00
那么就认为这个时间有冲突啦,请问这个sql怎么判断这两个时间段是有交集
------解决方案--------------------
结束时间<beginTime OR 开始时间>endTime
------解决方案--------------------
beginTime<开始时间 AND 结束时间<endTime
------解决方案--------------------
参数开始时间<=数据库结束时间 and 参数结束时间>=数据库开始时间 这个逻辑用来判断是否存在这个区间内
------解决方案--------------------


--以前写过类似功能的判断,就是某个东西,在某段时间内被某个人占用了,其他人这段时间内不能再去占用
--就是一个时间交叉的逻辑判断
--当转化为sql判断的时候,觉得没那么简单吧


create table #test
(
dbtime1 datetime,
dbtime2 datetime
)

insert into #test values('2014-6-3','2014-7-3')

declare @begindate datetime
declare @enddate datetime
set @begindate='2014-5-7'
set @enddate='2014-9-9'
select case when (COUNT(1)>0) then '交叉'else '不交叉' end as result from #test where 
(@begindate<dbtime1 and @enddate>dbtime2)--被包含
or
(@begindate>dbtime1 and @begindate<dbtime2)--后交叉
or
(@enddate>dbtime1 and @enddate<dbtime2)--前交叉


------解决方案--------------------
其实交叉的情况分为四种

第一,指定开始结束时间在已有的时间段内(包含)
第二,指定的开始时间落在已有的时间段内(后交叉)
第三,指定的结束时间落在已有的时间段内(前交叉)
第四,指定的开始时间落在已有的时间段内,指定的结束时间落在已有的时间段内(前后同时交叉)

不过第四种情况归属于第二或者第三种情况,所以sql中只有三个判断条件
  相关解决方案