sql 判斷兩個時間段是否有重合,是否存在交集

2021-10-05 18:39:30 字數 1124 閱讀 2111

總結起來就一句話:最小值小於最大值並且最大值大於最小值,則一定重疊。

我的使用場景: a 表 將時間有交叉的資料查出來

我的演算法:start_time,end_time  1> and 2>

1> 剔除完全相同  a1.start_time<>a2.start_time and a1.end_time!=a2.end_time

2> 最小值小於最大值並且最大值大於最小值   a1.start_timea2.start_time

select * from a a1 left join a a2 on (

a1.id=a2.id

)and  (

a1.start_time<>a2.start_time and a1.end_time!=a2.end_time 

and  a1.start_timea2.start_time )

集合1(第乙個判斷)  

start___________end  

a___________b  

集合2(第三個判斷)  

start________________end  

a_________b  

集合3(第三個判斷)  

start___________end  

a______________b  

集合4  

start___________end  

a_________________________b  

集合1並上(or)集合3實際上包含了集合4邏輯  

資料庫的字段 start_time, end_time

輸入的字段 a,b

第一種select * from test_table

where

(start_time >= a and start_time <= b)

or (start_time <= a and end_time >= b)

or (end_time >= a and end_time <= b)

第二種select * from test_table

where

not (

(end_time < a

or (start_time > b)

)

sql語句判斷兩個時間段是否有交集

場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...

sql語句判斷兩個時間段是否有交集

場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...

sql語句判斷兩個時間段是否有交集

場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...