在sql server中选择具有多个行标准的记录

时间:2015-11-02 04:44:22

标签: sql-server select

我有一张这样的表

ID          Day  Start End
----------- ---- ----- -----
1           M    7:30  9:30
2           T    7:30  11:30
3           T    12:30 14:30

另一张像这样的表

Day  Start End
---- ----- -----
M    8:30  11:30
T    8:30  10:30

我想从第一个表中选择所有基于第二个表的记录。

示例结果:

ID          Day  Start End  
----------- ---- ----- -----
1           M    7:30  9:30 
2           T    7:30  11:30

结果是这样的,因为第一个表中的前两个记录与第二个表中的标准匹配。第1排和第2排在同一天,时间与另一排发生冲突。

1 个答案:

答案 0 :(得分:1)

此联接将起作用:

select * 
from t1
join t2 on t1.day = t2.day and t1.end >= t2.start and t1.start <= t2.end

如果时间列为varchars,则需要转换为time

select * 
from t1
join t2 on t1.day = t2.day and 
           cast(t1.end as time) >= cast(t2.start as time) and 
           cast(t1.start as time) <= cast(t2.end as time)