Мне нужно выяснить, перекрывает ли новое расписание какие-либо из существующих расписаний.
Это таблица "интервалов":
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) ) )
Это вернет 1 и 2 записи. Я получил эту логику от Проверьте, перекрывает ли расписание друг друга?
Второй случай
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 AM во вторник ) Я хотел бы найти правильное расписание (будет "5"), которое находится между временем начала и окончания .