如何在SQL查询中查找时隙冲突



我想找到时间冲突,但它没有为以下记录提供正确的结果。我想为时隙返回冲突 true - "t1.starttime to t2.endtime",因为这个时隙与"t2.starttime 和 t2.endtime"冲突,因为 7 到 12 时间覆盖了 8 到 11.30 的某个时间。

t1.开始时间 t1。结束时间 t2.开始时间 t2.末日---------------- ---------------- ---------------- ----------------07
:00:00.0000000 12:00:00.0000000 08:00:00.0000000 11:30:00.0000000

我执行下面的查询,但它没有给我结果。

SELECT 
  count(1) 
FROM 
  t1 INNER JOIN t2 ON
  CAST(t1.StartTime as TIME)  
  BETWEEN CAST(t2.StartTime as TIME) 
  AND CAST(t2.EndTime as TIME) OR CAST(t1.EndTime as TIME)  
  BETWEEN CAST(t2.StartTime as TIME) 
  AND CAST(t2.EndTime as TIME)

重叠的正确逻辑要简单一些:

SELECT count(1) 
FROM t1 INNER JOIN
     t2
     ON CAST(t1.StartTime as TIME) < CAST(t2.EndTime as TIME) and
        CAST(t1.EndTime as TIME) > CAST(t2.StartTime as TIME);

逻辑是,一个间隔在另一个间隔结束之前开始,在另一个间隔开始之后结束。

最新更新