[MySQL] 日付の範囲抽出(過去は含まず、現在未来を含む)する方法

2 min read

朦朧とする意識の中で作った SQL の覚書。

状況

簡単な予約システム。 from ~ to に それぞれ予約時間が入っている。

条件

  • to は今日以前で
  • from は今日以後で
  • from-to の範囲に今日を含む

現在時刻: 2014/12/04 19:00

  from   to
× 2014/12/02 19:00 2014/12/03 19:00
× 2014/12/03 19:00 2014/12/04 18:00
2014/12/04 19:00 2014/12/05 19:00
2014/12/05 19:00 2014/12/06 19:00
2014/12/26 19:00 2014/12/29 19:00

表にするとこんな感じ

SQL

MySQL

SELECT
  *
FROM
  table
WHERE
  (column_from >= '2014/12/04 19:00' OR column_to >= '2014/12/04 19:00')

錯覚かもしれないけど、これでイケた。元気になったら見直ししたい。(must)

FuelPHPのクエリビルダ

FuelPHP で作っていたので一緒に。

括弧の OR 条件ってクエリビルダで出来るのか分からなかったけれど、ちゃんとあった。えらい。

$now = Date::time()->format('mysql');

DB::select()->from('table')
            ->where_open()
                ->where('column_from', '>=', $now)
                ->or_where('column_to', '>=', $now)
            ->where_close()
            ->execute();