猫型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

執筆者:

関連記事

sqlserver

SQLSERVERのトランザクションログの切り捨て・圧縮

トランザクションログはデータの登録・更新記録です。 INDEX1 復旧モデル2 切り捨て3 圧縮 復旧モデル トランザクションログを扱うには、トランザクションログがどのように使用されるかを知る必要があ …

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による接続 …

mysql

MySQLでフラグの列でSELECTする。(複合インデックスの使用条件)

status=’1’とかdelete=’0’といった条件はよく使用することでしょう。 そこでフラグにはどのデータ型がベストなのでしょうか。 INDEX1 …

sqlserver

SQL Server Management Studio の「上位200行の編集」を変更したい

恐らく私が十分に使用できていないだけで、機能はたくさんありそうなSQL Server Management Studio。最近新しいものに入れ替えたら(OS毎再インストールするハメになったのですが)、 …

sqlserver

「.NET」と「ASP.NET」からのSQL Serverへのコネクションを確認する(2)

「.NET」と「ASP.NET」からの接続には大きな違いがあります。 それは普通の?(exe形式の)アプリケーションか、Webアプリケーションかです。 この違いはアプリの終了というタイミングに大きく影 …