вы можете найти все «коллизии» между заданным диапазоном даты / времени и всеми существующими диапазонами даты / времени в вашей таблице с помощью запроса, подобного этому:
DECLARE @YourTable table (BookingID int,StartTime datetime,EndTime datetime)
INSERT INTO @YourTable VALUES (1, '2010-03-03 10:00am', '2010-03-03 10:30am')
INSERT INTO @YourTable VALUES (2, '2010-03-03 11:30am', '2010-03-03 01:30pm')
DECLARE @StartDate datetime
,@EndDate datetime
SELECT @StartDate='2010-03-03 9:00am'
,@EndDate='2010-03-03 10:15am'
;WITH AllDates AS
(
SELECT @StartDate AS DateOf
UNION ALL
SELECT DATEADD(mi,30,DateOf) --smallest increment to consider is 30 minutes
FROM AllDates
WHERE DateOf<@EndDate
)
,Collisions AS
(SELECT
*
FROM @YourTable y
INNER JOIN AllDates a ON a.DateOf>=y.StartTime AND a.DateOf<=y.EndTime
)
SELECT * FROM Collisions
ВЫВОД:
BookingID StartTime EndTime DateOf
--------- ----------------------- ----------------------- -----------------------
1 2010-03-03 10:00:00.000 2010-03-03 10:30:00.000 2010-03-03 10:00:00.000
1 2010-03-03 10:00:00.000 2010-03-03 10:30:00.000 2010-03-03 10:30:00.000
(2 row(s) affected)