MySQLのDATE_ADD
関数に問題があります。
私のリクエストは次のようになります。
SELECT *
FROM mydb
WHERE creationdate BETWEEN "2011-01-01" AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
GROUP BY MONTH(creationdate)
問題は、結果では、Juneが30日間しかないため、Julyの最初の結果があるため、関数が正しく機能しないことです。 =。
DATE_ADD
がうまく機能し、1か月以内に適切な日数を取るように指示する方法はありますか?
DATE_ADD
は、異なる月でも問題なく動作します。問題は、2001-01-01
に6か月を追加し、7月1日に予定されていることです。
これはあなたがやりたいことです:
SELECT *
FROM mydb
WHERE creationdate BETWEEN "2011-01-01"
AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) - INTERVAL 1 DAY
GROUP BY MONTH(creationdate)
OR
SELECT *
FROM mydb
WHERE creationdate >= "2011-01-01"
AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
GROUP BY MONTH(creationdate)
さらに学習するには、 DATE_ADD documentation をご覧ください。
*構文を修正するために編集
さて、私にとってこれは期待される結果です。 7月1月1日に6か月を追加します。
mysql> SELECT DATE_ADD( '2011-01-01', INTERVAL 6 month );
+--------------------------------------------+
| DATE_ADD( '2011-01-01', INTERVAL 6 month ) |
+--------------------------------------------+
| 2011-07-01 |
+--------------------------------------------+
DATE_ADD
は正常に機能します。 1月1日+ 6か月は7月1日です。1月1日+ 1か月は2月1日です。
操作間は包括的です。したがって、7月1日までにすべてを取得しています。 ( MySQL "between"句は含まれない? も参照)
必要なことは、1日を減算するか、間にではなく<演算子を使用することです。
DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
が '2011-07-01'の代わりに '2011-06-30'を与えると想定していることを理解していますか?もちろん、2011-01-01 + 6か月は2011-07-01です。 DATE_SUB(DATE_ADD("2011-01-01", INTERVAL 6 MONTH), INTERVAL 1 DAY)
のようなものが必要です。