SQLで時間の重複をチェックする

同じ期間のデータは事前にチェックしてエラーにするという処理は、
あらゆる場面で想定されそうなことですが、
以外と難しかったのでここに方法をのこしておきます。

他にも素晴らしい方法があると思いますが、
私が考えた結果、これにたどり着きました・・・

理屈を説明します。
開始時間A~終了時間A
開始時間B~終了時間B
があったとしまます。

この場合、以下の4つのチェックを行います。
①開始時間A~終了時間Aの間に、開始時間Bがあるかどうか
②開始時間A~終了時間Aの間に、終了時間Bがあるかどうか
③開始時間B~終了時間Bの間に、開始時間Aがあるかどうか
④開始時間B~終了時間Bの間に、終了時間Aがあるかどうか
いずれかの1つでもtrueになれば重複しています。

この法則を見つけるにあたり、私は下のような図を描いて眺めていました・・・
timecheck

皆さんしっていましたか?

もしもっと簡単な方法があれば教えていただけると嬉しいです

select
    count(*)
from
    table_name
where
    STARTB between STARTA and ENDA
 or ENDB   between STARTA and ENDA
 or STARTA between STARTB and ENDB
 or ENDA   between STARTB and ENDB
タイトルとURLをコピーしました