0

在这里,我有两个日期,如下所示

2012-08-12 to 2012-10-20

我需要如下输出:

month[08]=19
month[09]=30
month[10]=20

你可以通过 PHP,MYSQL 解决它

4

2 回答 2

2

用于PERIOD_DIFF(P1,P2)获取两个日期之间的月数。

返回周期 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 回答