同じ期間のデータは事前にチェックしてエラーにするという処理は、
あらゆる場面で想定されそうなことですが、
以外と難しかったのでここに方法をのこしておきます。
他にも素晴らしい方法があると思いますが、
私が考えた結果、これにたどり着きました・・・
理屈を説明します。
開始時間A~終了時間A
開始時間B~終了時間B
があったとしまます。
この場合、以下の4つのチェックを行います。
①開始時間A~終了時間Aの間に、開始時間Bがあるかどうか
②開始時間A~終了時間Aの間に、終了時間Bがあるかどうか
③開始時間B~終了時間Bの間に、開始時間Aがあるかどうか
④開始時間B~終了時間Bの間に、終了時間Aがあるかどうか
いずれかの1つでもtrueになれば重複しています。
この法則を見つけるにあたり、私は下のような図を描いて眺めていました・・・
。
皆さんしっていましたか?
もしもっと簡単な方法があれば教えていただけると嬉しいです
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