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

cngwdvgl  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(319)

我最近遇到了这个问题,我想知道我是不是走对了路。假设一个表有两列日期,一列代表某事物的开始,另一列代表某事物的结束。让我们称它们为valid\ u from和valid\ u to。作为输入,你给它开始和结束。在图中,第一条“线”代表一条时间线,任何横穿方框的线都被视为有效数据。下面的行是可能的日期星座,而行的左端总是有效的从,右端总是有效的到。以菱形结束的行的此列具有固定日期,如果不是直到无穷大(您可以认为这里是空值)。

我现在采取的方法是检查六个病例:
从无限到无限:
有效\u-from=null和有效\u-to=null
从无穷大到固定有效\u到:
有效\u-from=null和有效\u-to>=start
从固定有效\u从到无穷大:
valid\ u to=空,valid\ u from<=结束
有效的\u-from小于start,因此有效的\u-to必须大于start:
有效\u-from<=开始和有效\u-to>开始
有效的\u-to大于end,因此有效的\u-from必须小于end:
有效\u-from>=结束和有效\u-to<结束
有效\u-from和有效\u-to介于开始和结束之间
有效\u-from>=开始和有效\u-to<=结束
如果你需要任何信息,请告诉我。你认为我可能的星座是完整的吗?如果你有任何想法,只要分享你的想法,我会感兴趣的。

c6ubokkw

c6ubokkw1#

如果我理解正确,您可以使用一个简单的过滤器:

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

如果第一个时间间隔在第二个时间间隔之后结束,而第一个时间间隔在第二个时间间隔之前结束,则表示两个时间间隔重叠。
你的术语表明你想要一个真正的重叠,而不是两个仅仅接触的时间段。但是,通过更改 < 以及 ><= 以及 >= .

相关问题