SQLクエリ 日付期間における重複チェック

DBMS

[開始日時]と[終了日時]を特定期間として、その期間に一部でも重なるデータを抽出したい場合のクエリ例。

対象期間イメージ

例)
対象期間:2017/10/01 ~ 2017/10/31
[対象外パターン]
① 2017/09/01 ~ 2017/09/15 (開始も終了も対象期間より前)
② 2017/11/15 ~ 2017/11/20 (開始も終了も対象期間より後)
[対象パターン]
③ 2017/09/15 ~ 2017/10/15 (開始は期間外だが、終了が期間内)
④ 2017/10/15 ~ 2017/11/15 (開始が期間内、終了は期間外)
⑤ 2017/09/15 ~ 2017/11/15 (開始と終了の間に対象期間が存在)
⑥ 2017/10/10 ~ 2017/10/20 (対象期間内に開始と終了が存在)

クエリは下記で表現できる

比較開始日付 <= 対象期間終了日時 AND 比較終了日付 >= 対象期間開始日時

※ ‘<=’や’>=’のイコールは仕様によって付いたり付かなかったりします。
対象期間開始日時と比較開始日時、対象期間終了日時と比較終了日時が
被ってもよい場合はイコールが付きません。

 

コメント

タイトルとURLをコピーしました