我正在尝试提出一个 SQL 查询,该查询将检查给定的日期范围是否位于另一个日期范围内,或者是否包含其上限或下限,或者完全包裹它。现在我有 3 个单独的查询,但我确信它可以被简化。
有什么建议么?
SELECT * FROM TABLE
WHERE
-- SURROUNDING
(DATE1 <= START_DT - 1 DAY AND DATE2 >= END_DT + 1 DAY)
-- ENCOMPASSED
OR(DATE1 >= START_DT AND DATE2 <= END_DT)
-- STRADDLED
OR(DATE1) BETWEEN START_DT AND END_DT
OR (DATE2) BETWEEN START_DT AND END_DT
日期 1 -> 范围 -> 日期 2
开始范围 -> 日期 1 -> 日期 2 -> 结束范围
日期 1 -> 开始范围 -> 日期 2 -> 结束范围
开始范围 -> DATE1 -> 结束范围 -> DATE2
并作为旁注+或-在给定范围内的一天;Straddled 可以在范围停止等的最后一天(或后一天)开始。