mysql查詢兩個時間段是否有交集

2021-09-01 13:08:58 字數 1007 閱讀 1995

1.需求:查詢兩個時間段是否有交集

2.分析:分為三種情況:

入參:查詢開始時間,查詢結束時間

資料庫字段:start_date,end_date

2.1 :查詢開始時間在start_date與end_date之間,則肯定有交集

2.2 :查詢結束時間在start_date與end_date之間,則肯定有交集

2.3:查詢開始時間》=start_date,查詢結束時間<=end_date,則肯定有交集

其餘情況則無時間範圍的交集了。

3.sql成型:

3.1:正常思路的sql例子

按照上述思路,sql如下:

select * from 某個table c 

where 

((c.start_date >= '2018-01-01' and c.start_date<= '2018-12-31')

or (c.end_date >= '2018-01-01' and c.end_date<= '2018-12-31')

or (c.start_date <= '2018-01-01' and c.end_date>= '2018-12-31'))

and c.`status`=3;

3.2:反向查詢的sql思路:

只要start_date>查詢結束時間,則本條資料與當前查詢時間範圍肯定無交集

只要end_date《查詢開始時間,則本條資料與當前查詢時間範圍肯定無交集

所以,將上述兩種結果合併,並且取反,則是時間範圍有交集的資料。

sql如下:

select * from 某個table c

where c.`contract_type`=1

and not (c.`start_date`>'2018-12-31' or c.`end_date`<'2018-01-01')

and c.`status`=3

4.總結

上述兩個sql結果條數是一致的。有時候,反向考慮問題,能得到更簡潔的解決問題的方式

判斷兩個時間段範圍是否有交集

專案中經常會遇到判斷兩個時間段範圍是否有交集,所以本文就記錄下當時思考的過程和示例 本文提供兩種思路。1 參考時間段 包含 比較時間段 2 參考時間段 只包含 比較時間段結束時間 3 參考時間段 只包含 比較時間段開始時間 4 比較時間段 包含 參考時間段 根據圖示編寫的 示例 判斷兩個時間範圍是否...

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

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

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

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