期間が重複しているかどうかチェックするSQL

プログラミングしているとたまに出てくる、これ。
フォームなどで期間を入力して登録する際に、既に登録されているデータの中で、入力した期間で被っていないかどうかチェックしないといけない場合がありますね。

その時のSQLをついつい忘れてしまうので、備忘録として。

前提条件

テーブル名は schedules。
該当カラムは、start_atとend_at。

フォーム側のFrom〜Toの入力項目名はfrom, to。

SELECT
  *
FROM
  schedules
WHERE
  start_at < (toの値)
AND
  end_at > (fromの値)

どうしても大なり小なりの向きだったり、from, toの値の設定を忘れがち。。

ちなみにlaravelのQuery Builderで書くとこんな感じ。

$schedules = DB::table('schedules)
  ->where('start_at', '<', $request->get('to'))
  ->where('end_at', '>', $request->get('from'))
  ->get();

ご参考まで。