tSQL心理块-检查一段时间是否与另一段时间重叠



我有四次unix操作。其中两个是"今天"的开始和结束(以当天为准),即00:00:00和23:59:59,另外两个是用户选择的时间。

我需要一个(TSQL友好的)查询来检查"今天"时间之间的时间段是否与用户的时间重叠。有人能帮忙吗?

我在一个txt文档中有这个要记住(日期阅读障碍):

交叉口:

Date Range 1   |         |>----------------------<|
Date Range 2   |                 |>------------------------<|
where Range1Start <= Range2End and Range1End >= Range2Start

范围2中的范围1:

Date Range 1   |                   |>-------------<|
Date Range 2   |                 |>------------------------<|

where Range1Start >= Range2Start and Range1End <= Range2End

量程1中的量程2:

Date Range 1   |         |>----------------------<|
Date Range 2   |                 |>-------------<|

where Range2Start >= Range1Start and Range2End <= Range1End
where UserStart <= TodayEnd and
      UserEnd >= TodayStart

我知道这篇文章很旧,但我认为公认的答案是不完整的。大多数情况下,至少还有一个交集情况,并修改以上内容。

区间(固定)

Date Range 1   |         |>----------------------<|
Date Range 2   |                 |>------------------------<|
WHERE Range1Start <= Range2Start AND Range1End <= Range2End AND Range1End>=Range2Start

这样的修复可以避免将范围1中的范围2检测为交集(这是可接受的解决方案中的查询结果)

接下来的两个还可以,但没有很好地说明

量程2中的量程1

Date Range 1   |                      |>-------------<|
Date Range 2   |                 |>------------------------<|
Date Range 1   |                 |>------------------------<|
Date Range 2   |                 |>------------------------<|
WHERE Range1Start >= Range2Start AND Range1End <= Range2End 

量程1中的量程2:

Date Range 1   |         |>------------------------<|
Date Range 2   |               |>-------------<|
Date Range 1   |         |>------------------------<|
Date Range 2   |         |>------------------------<|

WHERE Range2Start >= Range1Start AND Range2End <= Range1End

最后第二个相交

交叉(右)

Date Range 1   |                |>----------------------<|
Date Range 2   |       |>------------------------<|
WHERE Range2Start <= Range1Start AND Range2End <= Range1End AND Range1Start <=Range2End

根据你的需要,我建议不要使用大于(>=)和小于(<=),因为你也知道这些组中有相等的周期,但这取决于你的

相等范围

Date Range 1   |         |>------------------------<|
Date Range 2   |         |>------------------------<|

WHERE Range1Start = Range2Start AND Range1End = Range2End

最新更新