SQLで日付範囲同士の重複チェック

たまにこんな場面に出くわす。

テーブルのカラムとして
from_date(開始日)
to_date(終了日)
を保持しており、画面からも
開始日
終了日
がわたってくる。

これらの範囲日付同士が、一日でも重複している場合はエラーとする。

意外とこれってチェックとしては面倒な部類で、
毎回紙にタイムラインの図を書いて、
う-ん
ってパターンを洗い出して条件を組んでいる気がした。

メモしとかなきゃまたいつ悩むハメになるか分からんのでメモ

select * from テーブル where 
(画面からのfrom日付 <= from_date and from_date <= 画面からのto日付)
or (画面からのfrom日付 <= to_date and to_date <= 画面からのto日付)
or (from_date <= 画面からのfrom日付 and 画面からのto日付 <= to_date)

Comments are closed.