获取具有两个日期列的所有行,其中日期在指定间隔内或之间

Get all Rows with two Date Columns where Dates are in or between an specified intervall

我最近遇到了这个问题,想知道我是否采取了正确的方法。 想想一个 table 有两个带日期的列,一个代表某事的开始,另一个代表某事的结束。 让我们称它们为 VALID_FROMVALID_TO。作为输入,您给它 STARTEND。 在图片中,第一条“线”代表时间线,任何穿过方框的线似乎都是有效数据。 底层线是可能的日期星座,而线的左端始终是 VALID_FROM,右端始终是 VALID_TO。 以 Diamond 结尾的行具有此列的固定日期,如果不是直到无穷大(您可以在此处考虑空值)。

我现在采用的方法是检查六种情况:

  1. 从无限到无限:
  1. 从无限到固定VALID_TO:
  1. 从固定的VALID_FROM到无限:
  1. VALID_FROM小于START,所以VALID_TO 必须大于 START:
  1. VALID_TO 大于 END,所以 VALID_FROM 必须小于 END:
  1. VALID_FROMVALID_TO 介于 START结束

如果您需要任何信息,请告诉我。你觉得我可能的星座完整吗? 如果您有任何想法,请分享您的想法,我会对此感兴趣。

如果我没理解错的话,你可以使用一个简单的过滤器:

select t.*
from t
where valid_to > :start and
      valid_from < :end

如果第一个结束第二个开始之后,并且第一个开始第二个结束之前,这就是两个时间间隔重叠。

你的术语表明你想要一个真正的重叠,而不是两个刚刚接触的时间段。但是,通过将 <> 更改为 <=>=.

可以轻松解决这个问题