GROUP BY日期/月

时间:2017-09-02 10:15:24

标签: php mysql

我有一个包含大量事务的表,其日期格式如下: -

January 1, 2016
September 9, 2016
September 13, 2016
August 8, 2017
August 9, 2017

我如何将月份和年份分组,当日期在中间时 - 它们是Varchar

2 个答案:

答案 0 :(得分:2)

这是一个有点棘手的问题。我们可以先使用STR_TO_DATE将日期字符串转换为真正的日期,然后返回到DATE_FORMAT的字符串,以获取用于对数据进行分组的月份和年份。

SELECT
    DATE_FORMAT(STR_TO_DATE(date_col, '%M %e, %Y'), '%Y-%m') AS ym,
    SUM(some_col) AS sum_col
FROM yourTable
GROUP BY
    DATE_FORMAT(STR_TO_DATE(date_col, '%M %e, %Y'), '%Y-%m')

要获得更好的长期解决方案,请考虑将文本日期存储在某种MySQL日期列类型中。另一种选择是将日期存储在数字列中,作为自纪元以来的秒数。上面的查询虽然可能在逻辑上是正确的,但可能没有机会使用任何索引,所以从性能的角度来看,你应该尽量避免这样的情况。

在这里演示:

Rextester

答案 1 :(得分:0)

GROUP BY DATE_FORMAT(record_date, '%Y%m')

参考Link