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

如何按1-12月自然顺序排序SQL查询结果中的月份?

解决SQL月份按自然顺序排序的问题

嘿,我懂你现在的困扰——用DATENAME(MONTH)排序只会按字母顺序来,结果把April排到最前面,完全不是我们想要的1月到12月的自然顺序。别着急,这儿有两种靠谱的解决办法:

方法一:用月份数字排序(最简洁)

直接利用DATEPART(MONTH, Inv_Date)返回的1-12数字值来排序,这样就能保证月份按自然顺序排列。修改后的SQL如下:

SELECT COUNT(Inv_Num) AS 'NUM OF PURCHASES', 
       DATENAME(MONTH, [Inv_Date]) AS MONTH
FROM tblInv_info
WHERE Inv_Date BETWEEN '2012-01-01' AND '2020-12-31'
GROUP BY DATENAME(MONTH, [Inv_Date])
ORDER BY DATEPART(MONTH, MIN(Inv_Date)) ASC;

为啥用MIN(Inv_Date)?因为每个月份分组里的所有日期都属于同一个月,取最小(或最大)日期的月份数字就能代表整个分组的月份顺序,这样能避免一些数据库对ORDER BY列的限制。

方法二:用CASE语句指定排序值(更灵活)

如果你的数据库环境有特殊需求,或者月份名称不是英文的,可以用CASE语句给每个月份手动指定排序序号:

SELECT COUNT(Inv_Num) AS 'NUM OF PURCHASES', 
       DATENAME(MONTH, [Inv_Date]) AS MONTH
FROM tblInv_info
WHERE Inv_Date BETWEEN '2012-01-01' AND '2020-12-31'
GROUP BY DATENAME(MONTH, [Inv_Date])
ORDER BY CASE DATENAME(MONTH, [Inv_Date])
           WHEN 'January' THEN 1
           WHEN 'February' THEN 2
           WHEN 'March' THEN 3
           WHEN 'April' THEN 4
           WHEN 'May' THEN 5
           WHEN 'June' THEN 6
           WHEN 'July' THEN 7
           WHEN 'August' THEN 8
           WHEN 'September' THEN 9
           WHEN 'October' THEN 10
           WHEN 'November' THEN 11
           WHEN 'December' THEN 12
         END ASC;

这种方法虽然写起来繁琐,但胜在灵活——不管月份名称是什么语言,只要对应调整WHEN里的字符串就行。

两种方法都能让你的输出变成January, February, March... December的正确顺序,选哪种就看你的具体需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:53:13