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

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

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

どもです。

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

MySQLでいうと、こう。

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

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

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

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

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

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

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

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

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

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

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

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

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