[英]SQL determine schedule availability
我有一個tbl_availability ,它確定資源何時可用。 表結構是:
id - running id
startdate - when this availability starts
enddate - when this availability ends
dayofweek - weekday of availability
fromtime - start time
totime - end time
一周的同一天可能有多個記錄,例如一個記錄為1000-1200星期日,另一個記錄為1300-1400星期日。
我試圖弄清楚如何獲得兩件事:
要確定是否存在沖突,此查詢將返回任何重疊的時間范圍:
SELECT * FROM tbl_availability
WHERE (startDate > @CheckEnd AND startDate <= @CheckStart)
OR (endDate < @CheckStart AND endDate >= @CheckEnd)
OR (startDate >= @CheckStart AND endDate <= @CheckEnd)
where子句的第一部分檢查是否有任何與開始時間重疊的內容。 第二部分檢查是否有任何與結束時間重疊的內容。 第三部分檢查范圍內是否有任何東西。
要檢查指定持續時間的可用時間范圍,請使用以下命令:
SELECT * FROM
(SELECT endDate AS PeriodStart, (SELECT TOP 1 startDate
FROM tbl_availability as sub
WHERE sub.startDate > tbl_availability.endDate
ORDER by sub.startDate) AS PeriodEnd
FROM tbl_availability) AS OpenPeriods
WHERE DateDiff(MINUTE, PeriodStart, PeriodEnd) >= DateDiff(MINUTE, @RangeStart, @RangeEnd)
我尚未測試這些查詢,因此這里可能需要進行一些調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.