You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何基于日期按月份统计数据表的行数?

嘿,这个按月份统计行数的需求很容易解决!根据你使用的数据库不同,我整理了对应的SQL语句,你可以直接参考:

按月份统计行数的SQL实现

如果你用MySQL/MariaDB

想要JAN-18格式的月份,用DATE_FORMAT函数格式化日期,再分组统计:

SELECT 
    DATE_FORMAT(Date, '%b-%y') AS Month,
    COUNT(*) AS Count
FROM Table1
GROUP BY DATE_FORMAT(Date, '%b-%y')
ORDER BY MIN(Date);

要是更习惯2018-01的格式,只需要把DATE_FORMAT的参数改成'%Y-%m'即可。

如果你用SQL Server

生成JAN-18格式

用FORMAT函数来格式化日期:

SELECT 
    FORMAT(Date, 'MMM-yy') AS Month,
    COUNT(*) AS Count
FROM Table1
GROUP BY FORMAT(Date, 'MMM-yy')
ORDER BY MIN(Date);

生成2018-01格式

可以用更高效的CONVERT函数:

SELECT 
    CONVERT(VARCHAR(7), Date, 120) AS Month,
    COUNT(*) AS Count
FROM Table1
GROUP BY CONVERT(VARCHAR(7), Date, 120)
ORDER BY Month;

当然也可以用FORMAT(Date, 'yyyy-MM')来实现,不过CONVERT在性能上会更优一些。

如果你用Oracle

生成JAN-18格式

用TO_CHAR函数处理日期:

SELECT 
    TO_CHAR(Date, 'MON-RR') AS Month,
    COUNT(*) AS Count
FROM Table1
GROUP BY TO_CHAR(Date, 'MON-RR')
ORDER BY MIN(Date);

注:MON会返回大写的月份缩写,想要小写的话换成mon就行;RR用于匹配两位年份。

生成2018-01格式

同样用TO_CHAR调整格式参数:

SELECT 
    TO_CHAR(Date, 'YYYY-MM') AS Month,
    COUNT(*) AS Count
FROM Table1
GROUP BY TO_CHAR(Date, 'YYYY-MM')
ORDER BY Month;

所有语句里的ORDER BY都是为了让结果按时间顺序排列,避免月份乱序,你可以根据需要决定是否保留。

内容的提问来源于stack exchange,提问作者Rahul shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:24:09