T-SQL日期时间问题。
我有一组时间范围,在这些时间范围内可能存在一组重叠的时间范围,我称之为“锁定”的时间。锁定时间不会跨越超过一天。我想做的是将时间拆分以排除锁定的时间,基本上给我那些没有被“锁定”的时间范围。可以安全地假设锁定时间不会落在时间范围之外。
例如:我从早上9点工作到下午5点,中午1点休息30分钟。我希望得到2行结果:早上9点到中午1点和下午1点30到5点。
如上所述,我有一组时间范围,因此在上述示例中,每天的工作时间和休息次数以及持续时间可能会有所不同。
我想在SQL中输入参数看起来像这样:
declare @timeranges table ( StartDateTime datetime, EndDateTime datetime )
declare @blockedtimes table ( StartDateTime datetime, EndDateTime datetime )
insert into @timeranges
select '01 Jan 2009 09:00:00', '01 Jan 2009 17:00:00'
union select '02 Feb 2009 10:00:00', '02 Feb 2009 13:00:00'
insert into @blockedtimes
select '01 Jan 2009 13:00:00', '01 Jan 2009 13:30:00'
union select '02 Feb 2009 10:30:00', '02 Feb 2009 11:00:00'
union select '02 Feb 2009 12:00:00', '02 Feb 2009 12:30:00'
结果集将如下所示。
Start End
--------------------- ---------------------
'01 Jan 2009 09:00:00' '01 Jan 2009 13:00:00'
'01 Jan 2009 13:30:00' '01 Jan 2009 17:00:00'
'02 Feb 2009 10:00:00' '02 Feb 2009 10:30:00'
'02 Feb 2009 11:00:00' '02 Feb 2009 12:00:00'
'02 Feb 2009 12:30:00' '02 Feb 2009 13:00:00'
我可以用游标或while循环来实现,但如果有人能建议如何在不迭代的情况下完成这个任务,那就太好了 - 谢谢。