我有一个包含大量事务的表,其日期格式如下: -
January 1, 2016
September 9, 2016
September 13, 2016
August 8, 2017
August 9, 2017
我如何将月份和年份分组,当日期在中间时 - 它们是Varchar
答案 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日期列类型中。另一种选择是将日期存储在数字列中,作为自纪元以来的秒数。上面的查询虽然可能在逻辑上是正确的,但可能没有机会使用任何索引,所以从性能的角度来看,你应该尽量避免这样的情况。
在这里演示:
答案 1 :(得分:0)
GROUP BY DATE_FORMAT(record_date, '%Y%m')
参考Link