判斷時間是否有重疊


起因

最近在做一個需求:判斷時間輸入時間段(開始時間、結束時間)是否跟數據庫已有數據重疊。什么叫重疊呢?

根據常規的認知,以上四種情況都被認為是時間的重疊。

解決方法

前提假設:

數據

開始時間 < 結束時間

php

待判斷開始時間:$start_time

待判斷結束時間:$end_time

mysql

表名:test

表開始時間字段:start_time

表結束時間字段:end_time

常規判斷重疊方法(判斷四種情況):

select count('x') from test where 
    (start_time < ‘$start_time’  && end_time > ‘$start_time’ && end_time < ‘$end_time’)  -- 情況一
    or (start_time > ‘$start_time’ && end_time < ‘$end_time’)  -- 情況二
    or (start_time > ‘$start_time’ && start_time < ‘$end_time’ && end_time < ‘$end_time’)  -- 情況三
    or (start_time < ‘$start_time’ && end_time > ‘$end_time’) -- 情況四

巧妙判斷重疊方法(判斷兩種情況):

select count('x') from test where (start_time < ‘$end_time’) and (end_time > ‘$start_time’) 

結論

「巧妙判斷重疊方法」是同事告訴我的,一開始我對這種判斷方式是抗拒的,覺得明明需要四個條件判斷才能實現的需求,怎么可能只通過兩個條件實現呢,一定要找出一個反例。
后來我放棄了,這其實是數學問題,比如一個數大於10,那么它一定大於5。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM