某个时间段是否在某个时间段里

小孩快跑 2014-06-29 11:11:02
我数据库有有两个字段开始时间beginTime跟endTime

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

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

如果我的文本框的开始时间是2014-03-03 12:00,结束时间是2014-06-10 12:00
那么就认为这个时间有冲突啦,请问这个sql怎么判断这两个时间段是有交集
...全文
160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小孩快跑 2014-08-15
  • 打赏
  • 举报
回复
引用 5 楼 x_wy46 的回复:
其实交叉的情况分为四种 第一,指定开始结束时间在已有的时间段内(包含) 第二,指定的开始时间落在已有的时间段内(后交叉) 第三,指定的结束时间落在已有的时间段内(前交叉) 第四,指定的开始时间落在已有的时间段内,指定的结束时间落在已有的时间段内(前后同时交叉) 不过第四种情况归属于第二或者第三种情况,所以sql中只有三个判断条件
哥,这么多人回复,就你了解我的需求。不过还是谢谢上面几位兄弟的回答,结贴!!!
专注or全面 2014-06-30
  • 打赏
  • 举报
回复
其实交叉的情况分为四种 第一,指定开始结束时间在已有的时间段内(包含) 第二,指定的开始时间落在已有的时间段内(后交叉) 第三,指定的结束时间落在已有的时间段内(前交叉) 第四,指定的开始时间落在已有的时间段内,指定的结束时间落在已有的时间段内(前后同时交叉) 不过第四种情况归属于第二或者第三种情况,所以sql中只有三个判断条件
专注or全面 2014-06-30
  • 打赏
  • 举报
回复


--以前写过类似功能的判断,就是某个东西,在某段时间内被某个人占用了,其他人这段时间内不能再去占用
--就是一个时间交叉的逻辑判断
--当转化为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)--前交叉

發糞塗牆 2014-06-30
  • 打赏
  • 举报
回复
参数开始时间<=数据库结束时间 and 参数结束时间>=数据库开始时间 这个逻辑用来判断是否存在这个区间内
chen357313771 2014-06-30
  • 打赏
  • 举报
回复
beginTime<开始时间 AND 结束时间<endTime
notsql 2014-06-30
  • 打赏
  • 举报
回复
结束时间<beginTime OR 开始时间>endTime

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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