范围内的日期范围等

时间:2013-09-17 12:55:05

标签: sql db2

我正在尝试提出一个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

DATE1 - &gt;范围 - &gt; DATE2

START RANGE - &gt; DATE1 - &gt; DATE2 - &gt;结束范围

DATE1 - &gt; START RANGE - &gt; DATE2 - &gt;结束范围

START RANGE - &gt; DATE1 - &gt;结束范围 - &gt; DATE2

作为旁注+或 - 在给定范围内的一天; Straddled可以在范围停止等的最后一天(或后一天)开始。

1 个答案:

答案 0 :(得分:3)

您需要测试两个条件以确定两个范围是否重叠。如果第一个的开头是在第二个结束之前,并且第一个的结尾是在第二个的开始之后。

where (
  range_1_min_date <= range_2_max_date
  and
  range_1_max_date >= range_2_min_date
)

添加了: 为了说明这是条件的原因,enter image description here考虑一个基本范围(范围_1,显示在图的底部),然后考虑date_range_2的所有其他各种可能性。

使用该图表,查看上面显示的每个范围的条件,您将看到它的工作原理。