Sql server 我想按照月份和年份而不是字母顺序对给定列进行升序和降序排序

Sql server 我想按照月份和年份而不是字母顺序对给定列进行升序和降序排序,sql-server,Sql Server,大概是这样的: 您还应在case语句中再添加一个月 '2016 january' '2016 july' '2016 saptember' '2016 december' '2017 february' '2017 march' '2017 june' 您需要将it拆分为年和月,然后应用ORDERBY子句 模式: select t.* from ( select '2016july' as str union all select '2016september' union

大概是这样的:

您还应在
case
语句中再添加一个月

'2016 january'
'2016 july'
'2016 saptember'
'2016 december'
'2017 february'
'2017 march'
'2017 june'

您需要将it拆分为年和月,然后应用ORDERBY子句

模式:

select t.*  from (
    select '2016july' as str union all 
    select '2016september' union all 
    select '2016december' union all 
    select '2016january' union all 
    select '2017february' union all 
    select '2017june' union all 
    select '2017march' 
)t
order by 
    cast( substring(str, 1, 4) as int), 
    case  
        when substring(str, 5, len(str)) = 'january' then 1
        when substring(str, 5, len(str)) = 'february' then 2 
        when substring(str, 5, len(str)) = 'march' then 3
        when substring(str, 5, len(str)) = 'june' then 6
        when substring(str, 5, len(str)) = 'july' then 7
        when substring(str, 5, len(str)) = 'september' then 9 
        when substring(str, 5, len(str)) = 'december' then 12 
    end
SELECT NAME
, CAST(SUBSTRING(NAME, 1, PATINDEX('%[a-z]%',NAME)-1) AS INT) YEAROF
,DATEPART(MM,  SUBSTRING(NAME,PATINDEX('%[a-z]%',NAME),LEN(NAME)) +' 01 2017')  MONTHOF
FROM #TAB
ORDER BY YEAROF,MONTHOF
现在请选择下面的选项

CREATE TABLE #TAB (NAME VARCHAR(50))

INSERT INTO #TAB
SELECT '2016july'
UNION ALL
SELECT '2016september'
UNION ALL
SELECT '2016december'
UNION ALL
SELECT '2016january'
UNION ALL
SELECT '2017february'
UNION ALL
SELECT '2017june'
UNION ALL
SELECT '2017march'
结果:

select t.*  from (
    select '2016july' as str union all 
    select '2016september' union all 
    select '2016december' union all 
    select '2016january' union all 
    select '2017february' union all 
    select '2017june' union all 
    select '2017march' 
)t
order by 
    cast( substring(str, 1, 4) as int), 
    case  
        when substring(str, 5, len(str)) = 'january' then 1
        when substring(str, 5, len(str)) = 'february' then 2 
        when substring(str, 5, len(str)) = 'march' then 3
        when substring(str, 5, len(str)) = 'june' then 6
        when substring(str, 5, len(str)) = 'july' then 7
        when substring(str, 5, len(str)) = 'september' then 9 
        when substring(str, 5, len(str)) = 'december' then 12 
    end
SELECT NAME
, CAST(SUBSTRING(NAME, 1, PATINDEX('%[a-z]%',NAME)-1) AS INT) YEAROF
,DATEPART(MM,  SUBSTRING(NAME,PATINDEX('%[a-z]%',NAME),LEN(NAME)) +' 01 2017')  MONTHOF
FROM #TAB
ORDER BY YEAROF,MONTHOF

如果所有日期都有效,则可以使用此选项:

+---------------+--------+---------+
|     NAME      | YEAROF | MONTHOF |
+---------------+--------+---------+
| 2016january   |   2016 |       1 |
| 2016july      |   2016 |       7 |
| 2016september |   2016 |       9 |
| 2016december  |   2016 |      12 |
| 2017february  |   2017 |       2 |
| 2017march     |   2017 |       3 |
| 2017june      |   2017 |       6 |
+---------------+--------+---------+

mysql还是SQL Server?我在SQL Server上工作,我需要SQL Server Sir@Oto Shavadze,你搞定了。是的,谢谢你!谢谢你,沙克尔先生,谢谢你,沙克尔米扎,它的工作很好,方法很简单。