2

以下は私のmysqlテーブルです:

--------------------------
ID  Date_From   Date_To
--------------------------
1   2011-02-01  2011-02-28
2   2012-09-01  2012-09-30
3   2012-10-01  2012-10-30
4   2012-11-01  2012-11-30
5   2012-12-01  2012-12-30
6   2013-01-01  2013-01-30
7   2014-03-01  2014-03-31

私はこのmysqlステートメントを持っています:

SELECT *
FROM TIME_PERIOD
WHERE
  (YEAR(DATE_FROM) >= '2012' AND MONTH(DATE_FROM) >= '10')
  AND (YEAR(DATE_TO) <= '2013' AND MONTH(DATE_TO) <= '12');

ID 3, 4,とを含むレコードのみを返します5。私が返すことを期待しているのは、ID 3, 4, 5,とのレコード6です。

助けてください。

4

5 に答える 5

3

次のようなクエリを使用する必要があります。

SELECT * FROM TIME_PERIOD WHERE 
(YEAR(DATE_FROM) >= '2013' OR (YEAR(DATE_FROM) >= '2012' AND
 MONTH(DATE_FROM) >= '10')) AND 
(YEAR(DATE_TO) <= '2013' AND MONTH(DATE_TO) <= '12');
于 2013-01-22T08:50:03.153 に答える
2

ID 6では、開始日は2013-01-01であり2013-01-01、月が10未満である01であるため、失敗します。すべてと条件について述べたように、falseにはそのレコードは含まれません。

于 2013-01-22T08:46:50.433 に答える
2

YYYYMMのようにyear_monthとして別の列を作成し、必要に応じて列ONINSERTとONUPDATEを自動的に更新する2つのトリガーを作成できます。

その場合、クエリは次のように単純になります。

WHERE year_month>=201210およびyear_month<=201312

于 2013-01-22T09:03:45.943 に答える
2

レコード 6 の月は 01 のようです。MONTH(DATE_FROM) >= '10' であるため、返されません。

于 2013-01-22T08:44:46.853 に答える
0

このコマンドを使用して結果を取得できます...

SELECT * FROM `TIME_PERIOD` WHERE `DATE_FROM` >= '2012-10-01' AND `DATE_TO` <= '2013-01-30'
于 2013-01-22T09:07:44.100 に答える