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

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

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

sqlserver

application log ってどこ?

SQLSERVERのメンテナンスプランを使用してバックアップを取得していたのですが、取得できていませんでした。 SQL Serverログには下記メッセージが表示されていました。 BACKUP fail …

mysql

MySQLで相関サブクエリを実行する

相関サブクエリとは、SQLの実行結果の行と行を比較することです。 ある行とある行の時間差を求めることで何秒間隔でデータが登録されているかがわかったり、 ある行とある行の売上差を求めることで、売上の上が …

mysql

MySQLのインポートエラー ERROR 1005 (HY000) (errno: 121)

ダンプをインポートする際にたまにるのがこのエラーです。 ERROR 1005 (HY000) at line 23: Can’t create table ‘./[スキーマ]/ …

mysql

MySQLの時間のフォーマット

MySQLのdatetime型はそのままSELECTすると、 2013-05-15 13:45:59 のように表示されてしまいます。 yyyy-mm-ddではなく、yyyy/mm/dd がいい場合もあ …