从表中选择相交时间

时间:2017-03-06 11:40:22

标签: sql sql-server tsql

我的表格如下:

ShiftID, StoreName, StartDate, EndDate, StartTime, EndTime, ShiftNo.

我需要选择所有相交的班次,例如,假设一天有2班(ShiftNo。列),如果班次编号2在班次编号1结束之前开始,那么两个班次应该出现在结果集中。

非常感谢任何帮助。

谢谢大家。

1 个答案:

答案 0 :(得分:1)

首先,在单独的列中包含日期和时间对此没有用。所以,让我们把它们结合起来。这可能需要调整数据类型:

with s as (
      select s.*,
             (cast(startDate as datetime) + starttime) as startdatetime,
             (cast(endDate as datetime) + endtime) as enddatetime
      from shifts s
     )
select s.*
from s
where exists (select 1
              from s s2
              where s.startdatetime < s2.enddatetime and
                    s.enddatetime > s2.startdatetime
             );