1. 程式人生 > >SQL判斷兩個日期時間區間是否有相交

SQL判斷兩個日期時間區間是否有相交

需求:找出時間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的區間,是不是已經在資料庫中有了

  1. 開始時間小於A,並且結束時間大於A;
  2. 開始時間小於B,並且結束時間大於等於B;
  3. 開始時間大於A,並且結束時間小於B;
  4. 開始時間等於A,並且結束時間大於等於B。

見下面抽象圖解 -_-||: