猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

DataBase MySQL SQLServer

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

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL, SQLServer

執筆者:

関連記事

mysql

MySQLのChar型は”(ダブルクォーテーション)ではなく'(シングルクォーテーション)でSELECT

タイトルの通り MySQLのChar型は”(ダブルクォーテーション)ではなく'(シングルクォーテーション)で囲ってSELECT しなければなりません。 正確には、そうしなければパフォーマン …

mysql

utilitiesのmysqlfailoverを使う(2)

前回の utilitiesのmysqlfailoverを使う(1)で設定・起動は完了しています。 私の目的は2台のMySQLサーバーを定期的に入れ替えてメンテナンスすることです。 今回はマスターがダウ …

mysql

MySQLにファイルからSQLを読み込む

MySQLにファイルからSQLを読み込む方法は 意外と知られていない方法ですのでメモっておきます。 INDEX1 MySQLにログイン中の場合2 スクリプトから実行する場合3 おまけのコマンドで指定す …

mysql

MySQLのexists

exists自体はほとんどのSQL自体に実装されていると思われます。 しかし、使用方法を誤るとレスポンスに大きな影響を与えてしまします。 副問合せであるexists内部で、集問い合わせのキー列と結合し …

mysql

MySQL ERROR: Can’t connect to MySQL server on ‘xxx.xxx.x.xx’ (13)

MySQL ERROR: Can’t connect to MySQL server on ‘xxx.xxx.xxx.xxx’ (13) はSELinuxによる接続 …