Oracle判断两个时间段是否相交

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) )

方法二

Oracle判断两个时间段是否相交_第1张图片

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

你可能感兴趣的:(数据库,数据库,java,开发语言)