ど素人から毛を生やす。<延>

[MySQL]範囲データを検索する

Web > Other 2022年12月21日(最終更新:1年前)

2022年12月21日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。

データ側に日付データを持ち、検索は範囲検索で行う、というのはよくある話。

MySQLでいうと、こう。

カラム名 >= '開始日' AND カラム名 <= '終了日'

BETWEENを使っても良いが、こう書く癖を付けた方がDATETIMEの境界値に対応し易い

閑話休題、今回やりたいのは、データ側の日付データが範囲。つまり開始日と終了日を持つ場合。

データ側の開始日と終了日を、検索側の開始日と終了日でそれぞれ評価すれば良い??

NO。
結論から述べると、正解は、こう。

データ開始日 <= '検索終了日' AND データ終了日 >= '検索開始日';

裏を考えると分かり易い。

データAは「データ開始日 < 検索終了日 AND データ終了日 < 検索開始日」
データBは「データ開始日 > 検索終了日 AND データ終了日 > 検索開始日」の状態だ。

この状態でなければ、データは検索の範囲内になる。

データC~Fは、どれも「データ開始日 <= 検索終了日 AND データ終了日 >= 検索開始日」の状態だ。

なお、検索開始日または終了日しか設けない場合はこうなる。

また、今回は日付範囲の検索の話をしたが、数字範囲でも全く同じことになる。
とにかく、範囲×範囲検索の場合は、
検索下限がデータ上限、
検索上限がデータ下限を評価する組み合わせとなることを覚えておけば良い。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)