SQL判斷兩個日期時間區間是否有相交
阿新 • • 發佈:2019-01-08
需求:找出時間A到B時間段是否已經請過假了,或者這個期間已經請過假了
select count(id) from tblName where ...
and ( (cast(concat(date_from,' ',time_from) as timestamp) > '2018-03-30 08:00'
and cast(concat(date_from,' ',time_from) as timestamp) < '2018-03-30 12:00')or( cast(concat(date_from,' ',time_from) as timestamp) < '2018-03-30 08:00'
and cast(concat(date_to,' ',time_to) as timestamp) > '2018-03-30 08:00')
or (cast(concat(date_from,' ',time_from) as timestamp) = '2018-03-30 08:00'
and cast(concat(date_from,' ',time_from) as timestamp) <= '2018-03-30 12:00')
)
有,則表示在這個時間段裡有資料
解釋:
找開始時間A到結束時間B的區間,是不是已經在資料庫中有了
- 開始時間小於A,並且結束時間大於A;
- 開始時間小於B,並且結束時間大於等於B;
- 開始時間大於A,並且結束時間小於B;
- 開始時間等於A,並且結束時間大於等於B。
見下面抽象圖解 -_-||: