我想在SQLServer 2012中检查给定的开始时间和结束时间是否在开始时间和结束时间之间。
案例:我有一个表,它有两列开始时间和结束时间有两行,请看下面那是我的表
StartTime | EndTime
10:00:00 | 17:00:00
17:30:00 | 18:30:00
案例1 :鉴于开始时间为< 10:05:00'结束时间是< 16:00:00'然后它应该返回< 10:00:00'和 00:00'。
案例2 :给定的开始时间为09:05:00'结束时间是< 16:00:00'然后它应该返回< 10:00:00'和 00:00'。
案例3 :考虑到开始时间是< 09:05:00'结束时间是' 15:00'然后它应该返回< 10:00:00'和 00:00'。
案例4 :鉴于开始时间是' 05:05:00'结束时间是' 15:00'然后它应该返回< 10:00:00'和 00:00'。
案例5 :鉴于开始时间为< 10:05:00'结束时间是' 15:00'然后它应该返回< 10:00:00'和 00:00'。
案例6 :鉴于开始时间为< 17:00:00'结束时间是' 30:00'然后它不应该返回任何东西。
答案 0 :(得分:2)
所以你想要返回与参数描述的时间段重叠的记录,对吧? 嗯,这是一种方法:
创建并填充样本表(请在将来的问题中保存此步骤)
DECLARE @T as Table
(
StartTime time,
EndTime time
)
INSERT INTO @T VALUES
('10:00:00', '17:00:00'),
('17:30:00', '18:30:00')
声明并填充查询变量:
DECLARE @StartTime time, @EndTime time
SELECT @StartTime = '23:05:00',
@EndTime = '17:00:00'
查询:
SELECT *
FROM @T
WHERE
(
StartTime < @EndTime
AND EndTime > CASE WHEN @StartTime > @EndTime THEN '00:00:00' ELSE @StartTime END
)
OR
(
-- both periods must overlap since they both include '00:00:00'
@StartTime > @EndTime
AND StartTime > EndTime
)
OR
(
@StartTime < @EndTime
AND StartTime > EndTime
AND EndTime > @StartTime
)
结果:
StartTime EndTime
10:00:00 17:00:00
注意:我已考虑到时间段可能包括两个不同的日期。