簡體   English   中英

SQL確定計划可用性

[英]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星期日。

我試圖弄清楚如何獲得兩件事:

  1. 輸入新記錄時檢查與現有記錄沒有沖突(重疊)
  2. 給定開始日期和結束日期,找到所有適用的可用期間。

要確定是否存在沖突,此查詢將返回任何重疊的時間范圍:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM