如何按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
相关产品推荐
相关产品推荐

