Возможный подход к этой проблеме:
Получите количество целых недель между указанной датой / временем и StartTime
.
Добавьте количество недель к StartTime
, чтобы получить самое позднее время начала.
Вычислите разницу между самым поздним временем начала и указанной датой / временем.
Проверьте, меньше ли эта разница, чем TimeDifferenceInSeconds
.
И вот как это можно реализовать:
SELECT *
FROM Schedules
WHERE StartTime < @Date AND TimeDifferenceInSeconds >
DATEDIFF(ss, DATEADD(week, DATEDIFF(day, StartTime, @Date) / 7, StartTime), @Date)
Это возвращает всерасписание, на которое падает @Date
.
Более удобная для чтения версия:
WITH NewSchedules AS (
SELECT
*,
NewStartTime = DATEADD(week, DATEDIFF(day, StartTime, @Date) / 7, StartTime)
FROM Schedule
WHERE StartTime < @Date
)
SELECT *
FROM NewSchedules
WHERE TimeDifferenceInSeconds > DATEDIFF(ss, NewStartTime , @Date)