0

日付範囲を別の日付範囲と一致させたい状況にあります。単純かもしれませんが、行き詰まっています。

以下はテーブル構造です

表 - ライフサイクル

  • life_id
  • life_start_date
  • life_end_date

次に、以下のようないくつかのレコード

1 - 07/23/2013 - 07/24/2013
2 - 07/15/2013 - 07/25/2015
3 - 03/10/2013 - 03/10/2014

これらのレコードを日付範囲で検索し、その範囲に生命が存在するかどうかを確認したいと考えています。例: 2013 年 8 月 1 日から 2014 年 1 月 1 日までの生活を検索したい

期待される結果として、life#2 と life#3 を選択する必要があります。

これは MySQL クエリでどのように行うことができますか?

どんな助けでも大歓迎です。

4

3 に答える 3

2

このクエリはそれを行う必要があります:

SELECT 
    *
FROM
    lifecycles
WHERE
    str_to_date(life_start_date, '%m/%d/%Y') <= '2014-01-01' 
    AND str_to_date(life_end_date, '%m/%d/%Y') >= '2013-08-01';

これは基本的に、探している範囲の終了前に人生が始まっておらず、範囲の開始前に人生が終わっていないことを意味します。

日付を VARCHAR 形式で保持するため、str_to_date 関数を使用する必要があります。これは、MySQL が start_date または end_date 列にある可能性のあるインデックスを利用できないため、不適切です。

于 2013-08-23T12:35:31.570 に答える
1

これはあなたを助けるかもしれません。

SELECT SUM( IF( '2014-01-02' BETWEEN from_date AND to_date, 1, 0 ) ) AS from_exist,
       SUM( IF( '2014-02-12' BETWEEN from_date AND to_date, 1, 0 ) ) AS to_exist
FROM date_range

結果に基づいて、日付が既存の日付範囲内にあるかどうかを確認できます。

于 2014-02-13T14:31:13.930 に答える