我需要查找新的日程是否与任何现有日程重叠。检查日程是否重叠
这就是“间隔”表:
id first last
1 1900-01-01 09:00 1900-01-01 10:00
2 1900-01-01 15:00 1900-01-01 18:00
3 1900-01-01 18:01 1900-01-01 08:00
我使用的是标量函数dbo.TimeOnly从日期时间字段提取时间的一部分。
我的选择标准如下
第一种情况
declare @start datetime
declare @end datetime
set @start = dbo.TimeOnly('2011-may-11 08:01:00');
set @end = dbo.TimeOnly('2011-may-11 15:30:00');
select * from intervals where
(NOT (dbo.TimeOnly(last) < @start OR @end < dbo.TimeOnly(first)))
这将返回第一和第二的记录。我从Check whether the schedule overlaps each other?
其次情况下,这个逻辑
set @start = dbo.TimeOnly('2011-may-11 07:01:00');
set @end = dbo.TimeOnly('2011-may-11 08:30:00');
如何编写一个查询,将在第二种情况下只返回3记录的标准是什么?
UPDATE
我会给我的问题
不同的人管理一个特定的事件在一天一定持续时间的更多细节。
对于周一,计划格式是这样
Id Start End User Days
1 00:01 AM 08:00 AM 'A' 1
2 08:01 AM 04:00 PM 'B' 1
3 04:00 PM 00:00 AM 'C' 1
对于周二
4 08:01 AM 04:00 PM 'B' 2
5 07:00 PM 07:00 AM 'C' 2
对于周三
6 08:01 AM 04:00 PM 'A' 4
7 10:00 PM 08:00 AM 'B' 4
这里几天都存储在位值的格式即
星期一= 1,星期二= 2,星期三= 4,星期四= 8,星期五= 16,星期六= 32,星期日= 64
当我们创建一个特定日子的时间表,它不应该在时间之间重叠。 我想获得一个SQL查询,用于在创建特定日期的新时间表时检查是否存在任何时间表。
对于特定事件时间(说甚至发生在周二周四上午04:00)我想找到开始和结束时间之间的正确时间表(将是“5”)。
Anoop对于间隔表中的记录3,是第二天08:00的“最后一次”时间?所以应该是'1900-01-02 08:00'(基本上)?然后,你的**第二种情况是'set @end = dbo.TimeOnly('2011-may-12 08:30:00');' – 2011-05-11 14:22:15
是的,这是第二天。 – 2011-05-11 14:30:33
@Kit但我只检查第二个条件的时间部分所以这个函数返回'set @end = dbo.TimeOnly('2011-may-12 08:30:00');''1900-01-01 08 :30:00' – 2011-05-11 14:32:34