SQL中常常要判断两个时间段是否相交,该如何判断呢?比如两个时间段(A1,A2)和(B1,B2)
方法一:本方法先考虑这两段时间什么情况下不相交,如图:
无非两种情况:(A1,A2)段在(B1,B2)段前面和(A1,A2)段在(B1,B2)段后面。其对应的表达式为:(A2 < B1) OR (B2 < A1)。
于是相交条件就是 NOT((A2 < B1) OR (B2 < A1))
SQL:
select
T1.A2
,T1.A2
,T2.B1
,T2.B2
FROM T1,T2
WHERE NOT ( (T1.A2 < T2.B1) OR (T2.B2 < T1.A1) )
方法二
![](https://img-blog.csdnimg.cn/img_convert/d5e33ae45cdf48c38361154410d4ee6a.png)
SQL1:
select
T1.A2
,T1.A2
,T2.B1
,T2.B2
FROM T1,T2
WHERE T1.A1<=T2.B2 AND T2.B1<=T1.A2
SQL1
select
T1.A2
,T1.A2
,T2.B1
,T2.B2
FROM T1,T2
WHERE T2.B1<=T1.A2 AND T1.A1<=T2.B2