我正在尝试对月份进行分类但这是结果。
查询:
SELECT DISTINCT Month FROM ClientsDataAging ORDER BY Month ASC
结果
它似乎按字母顺序排序。
我希望每月按月,二月,三月等进行排序等。
我找到了这个答案:https://stackoverflow.com/a/17271676/9651031 但它似乎与我的情况不同,所以,任何帮助将不胜感激。 TIA!
答案 0 :(得分:1)
鉴于您将月份存储为字符串数据,您当前看到的输出是正确的,因为这些日期按文本排序,而不是日期。一种选择是使用SELECT Month
FROM ClientsDataAging
ORDER BY CONVERT(datetime, SUBSTRING(Month, 1, 3) + ' 01 18');
格式掩码107:
'Jan 01 18'
这里的诀窍是,例如,对于月份' 1月,我们构建字符串'Mon dd, yy'
。这是CONVERT
的格式,2018
期望掩码107.因此,我们将您的文本月份转换为当月第一天的真正日期。我随意使用{{1}}作为年份,但这并不重要,因为你从未提及任何年份数据。
这是一个演示,显示所有文本月份都正确转换。
答案 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
尝试以上脚本。