【发布时间】:2014-01-10 14:53:22
【问题描述】:
我想找到时间冲突,但它没有给我以下记录的正确结果。 我想为时间段返回冲突真值 - “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
我执行下面的查询,但它没有给我结果。
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)
【问题讨论】:
-
你是否搜索过:[tsql] or [sql-server] or [sql-server-2008] or [sql-server-2008-r2] or [sql-server-2005] 重叠范围
-
如果您真的尝试按照自己的查询进行查询,您会注意到 7 不在 8 到 11:30 之间,而 12 也不是。所以当然不满足你的条件。有关正确逻辑,请参阅 Gordon 的答案。通常有帮助的是实际拿一张纸并尝试将您的问题绘制为线条重叠的时间段。画出所有可能的重叠部分,看看在每种情况下,您可以在每行的开头和结尾之间找到什么逻辑关系。
-
您可能应该阅读此article。
标签: sql sql-server sql-server-2008 between