SQL Server查询:月份排序

时间:2018-05-17 05:52:14

标签: sql-server

我正在尝试对月份进行分类但这是结果。

查询:

SELECT DISTINCT Month FROM ClientsDataAging ORDER BY Month ASC

结果

enter image description here

它似乎按字母顺序排序。

我希望每月按月,二月,三月等进行排序等。

我找到了这个答案:https://stackoverflow.com/a/17271676/9651031 但它似乎与我的情况不同,所以,任何帮助将不胜感激。 TIA!

3 个答案:

答案 0 :(得分:1)

鉴于您将月份存储为字符串数据,您当前看到的输出是正确的,因为这些日期按文本排序,而不是日期。一种选择是使用SELECT Month FROM ClientsDataAging ORDER BY CONVERT(datetime, SUBSTRING(Month, 1, 3) + ' 01 18'); 格式掩码107:

'Jan 01 18'

enter image description here

这里的诀窍是,例如,对于月份' 1月,我们构建字符串'Mon dd, yy'。这是CONVERT的格式,2018期望掩码107.因此,我们将您的文本月份转换为当月第一天的真正日期。我随意使用{{1}}作为年份,但这并不重要,因为你从未提及任何年份数据。

这是一个演示,显示所有文本月份都正确转换。

Demo

答案 1 :(得分:0)

需要在ORDER BY中将名称转换为月号。 类似的东西:

SELECT DISTINCT Month FROM ClientsDataAging ORDER BY 
DATEPART(MM,Month + ' 01 2018')   ASC

(..我没有测试过,因为从手机上发布了这个)

ORDER BY项目的编辑必须出现在..

;with t as 
(select distinct [Month], DATEPART(MM, [Month] + ' 01 2018') MonthNum from ClientsDataAging)
select [Month] From t ORDER BY MonthNum ASC

...如果你不需要,你应该已经删除了DISTINCT

答案 2 :(得分:0)

SELECT DISTINCT Month FROM ClientsDataAging ORDER BY MONTH('01-' + [Month] + '-2018') ASC

尝试以上脚本。