我的表格如下:
ShiftID, StoreName, StartDate, EndDate, StartTime, EndTime, ShiftNo.
我需要选择所有相交的班次,例如,假设一天有2班(ShiftNo。列),如果班次编号2在班次编号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
);