1. 程式人生 > >【mysql】判斷兩個時間段是否存在交集

【mysql】判斷兩個時間段是否存在交集

場景: 資料庫有有兩個欄位.開始時間<startTime>,和結束時間<endTime>,指定一個時間段(a,b),a表示開始時間,b表示結束時間。看資料庫中有沒有與(a,b)衝突的時間段,有的話就返回那條記錄。


解析:兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒有想到,只想到有交集的語句,如果返回不為空則表明有交集,否則沒有交集。


sql語句:

select * from test_table where
(startTime > a AND startTime < b) OR 
(startTime < a AND endTime > b) OR
(endTime > a AND endTime < b)


圖解:

1. startTime > a AND startTime < b



2. startTime < a AND endTime > b




3. endTime > a AND endTime < b