0

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

4

2 に答える 2

2

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;
于 2012-08-31T18:47:55.307 に答える
0

関心のある日付範囲のすべての可能な日付値を含むテーブルを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 /データウェアハウスアプリケーションで一般的に使用されていますが、ここでうまくいくと思います。

そこにも「年」の値を追加したことに注意してください。これは、年にまたがる日付範囲を計画していなかった場合を除いて、これも処理する必要があると思います。

于 2012-08-31T17:52:22.250 に答える