どもです。
データ側に日付データを持ち、検索は範囲検索で行う、というのはよくある話。
MySQLでいうと、こう。
カラム名 >= '開始日' AND カラム名 <= '終了日'
BETWEENを使っても良いが、こう書く癖を付けた方がDATETIMEの境界値に対応し易い。
閑話休題、今回やりたいのは、データ側の日付データが範囲。つまり開始日と終了日を持つ場合。
データ側の開始日と終了日を、検索側の開始日と終了日でそれぞれ評価すれば良い??
NO。
結論から述べると、正解は、こう。
データ開始日 <= '検索終了日' AND データ終了日 >= '検索開始日';
裏を考えると分かり易い。
データAは「データ開始日 < 検索終了日 AND データ終了日 < 検索開始日」
データBは「データ開始日 > 検索終了日 AND データ終了日 > 検索開始日」の状態だ。
この状態でなければ、データは検索の範囲内になる。
データC~Fは、どれも「データ開始日 <= 検索終了日 AND データ終了日 >= 検索開始日」の状態だ。
なお、検索開始日または終了日しか設けない場合はこうなる。
また、今回は日付範囲の検索の話をしたが、数字範囲でも全く同じことになる。
とにかく、範囲×範囲検索の場合は、
検索下限がデータ上限、
検索上限がデータ下限を評価する組み合わせとなることを覚えておけば良い。