我有两组时间,我们需要检查一些重叠是否发生。例如。 (BeginTime_1,EndTime_1)和(BeginTime_2,EndTime_2)是两组时序。我需要找出这些时间是否重叠。是否可以使用SQL
。我使用C#
实现了它,现在我需要使用SQL
来实现它。是否有任何内置功能来实现这一目标?任何帮助将受到高度赞赏。 (我只考虑时间......:mm:ss)
答案 0 :(得分:1)
该查询使用以下逻辑:
注意:它不考虑NULL值,因为即使任何列都是NULLABLE,您也需要澄清NULLS应该如何解释。例如。 NULL EndTime可能意味着它仍在进行中并且应该将当前时间假定为EndTime。
SELECT *
FROM TheTable
WHERE (EndTime_1 BETWEEN BeginTime_2 AND EndTime_2)
OR (EndTime_2 BETWEEN BeginTime_1 AND EndTime_1)
OR (BeginTime_1 BETWEEN BeginTime_2 AND EndTime_2)
OR (BeginTime_2 BETWEEN BeginTime_1 AND EndTime_1)
另一种方法是:
这假设开始/结束时间在逻辑上是一致的。即你永远不会在结束前开始。
SELECT *
FROM TheTable
WHERE NOT (BeginTime_1 > EndTime_2 OR BeginTime_2 > EndTime_1)
应用逻辑规则,WHERE子句可以更改为:
WHERE BeginTime_1 <= EndTime_2 AND BeginTime_2 <= EndTime_1