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,你搞定了。是的,谢谢你!谢谢你,沙克尔先生,谢谢你,沙克尔米扎,它的工作很好,方法很简单。