Here I Have The Two Dates Like The Following
2012-08-12 to 2012-10-20
I Need The Output Like the following:
month[08]=19
month[09]=30
month[10]=20
You Can Solve it By PHP,MYSQL
PERIOD_DIFF(P1,P2)
2つの日付の間の月数を取得するために使用します。
期間P1とP2の間の月数を返します。P1およびP2は、YYMMまたはYYYYMMの形式である必要があります。期間引数P1およびP2は日付値ではないことに注意してください。
mysql> SELECT PERIOD_DIFF(200802,200703); -> 11
あなたの場合、あなたは以下を使うでしょう:
SELECT PERIOD_DIFF(DATE_FORMAT('2012-10-20', '%Y%m'), DATE_FORMAT('2012-08-12', '%Y%m'))
この投稿によると、使用EXTRACT
する方が速い場合があります。
SELECT PERIOD_DIFF( EXTRACT(YEAR_MONTH FROM '2012-10-20'), EXTRACT(YEAR_MONTH FROM '2012-08-12')) AS months FROM your_table;
関心のある日付範囲のすべての可能な日付値を含むテーブルをMySQLで作成したい場合は、クエリから比較的簡単にこれを行うことができます。
テーブルには、次のような単一の列が必要です。
dates
----------
2012-01-01
2012-01-02
...
2050-12-31
次に、次のようにテーブルをクエリできます。
SELECT YEAR(`dates`) as `years`, MONTH(`dates`) as `months`, COUNT(`dates`) as `days`
FROM date_table
WHERE `dates` BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
GROUP BY `years`, `months`
ORDER BY `years` ASC, `months` ASC
日付のテーブルを持つこの種のアプローチは、BI /データウェアハウスアプリケーションで一般的に使用されていますが、ここでうまくいくと思います。
そこにも「年」の値を追加したことに注意してください。これは、年にまたがる日付範囲を計画していなかった場合を除いて、これも処理する必要があると思います。