要在SQL中查詢兩個日期區間重疊的情況,可以使用邏輯條件來判斷區間A和區間B是否有交集。 假設每個區間由兩個日期構成:StartDate 和 EndDate,其中區間A由 A_StartDate 和 A_EndDate 定義,區間B由 B_StartDate 和 B_EndDate 定義。 您希望找到任何B區間內的日期在A區間內的情況。
一個區間內的日期在另一個區間內,當且僅當下列條件之一為真:
- B區間的開始日期在A區間內。
- B區間的結束日期在A區間內。
- B區間完全包含A區間。
這可以透過以下SQL條件表示:
這個條件檢查A區間的開始日期是否在或在B區間結束之前,並且A區間的結束日期在或在B區間開始之後。 只要這兩個條件都滿足,兩個區間就有重疊。WHERE A_StartDate <= B_EndDate AND A_EndDate >= B_StartDate
範例SQL查詢
假設您有一個表格 Intervals,包含列 A_StartDate, A_EndDate, B_StartDate, B_EndDate,那麼查詢可以寫成:
這個查詢將傳回所有符合條件的行,即A和B區間至少有一天重疊的情況。SELECT * FROM Intervals WHERE A_StartDate <= B_EndDate AND A_EndDate >= B_StartDate;
以下附上圖片解釋: