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

标签 sql sql-server sql-server-2008 between

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

t1.StartTime     t1.EndTime       t2.StartTime     t2.EndTime
---------------- ---------------- ---------------- ----------------
07:00:00.0000000 12:00:00.0000000 08:00:00.0000000 11:30:00.0000000

i execute below query but it does not give me result.

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);

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

关于sql - 如何在 SQL 查询中查找时隙冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047360/

相关文章:

mysql - 相当于 MySQL 的 "SHOW VARIABLES"的 SQL 服务器

sql-server - SSRS 2005 : Group page numbers resetting, 从 xx 查看 xx

sql-server - T-SQL,在子查询中使用 MAX()+1 插入不会增加,替代方案吗?

sql-server - 如何将基于 CURSOR 的查询转换为基于 SET 的查询

sql - 查看列是否有 varchar 20

sql - 如何删除特定列中包含少于 75 个字符(约 10 个单词)的行

sql-server-2008 - 如何捕获SQL Server存储过程中的错误?

sql - T-SQL 查询返回不应该的项目

mysql - 我是 sql 新手,我正在使用 mysql,我不能使用复制表并创建本地临时表和全局临时表

sql - pl/sql 函数 - 为 SELECT ... NOT IN() 动态传递多个 varchar2 值