2017-04-26 143 views
0
monthtext <-----(column Name in varchar) 

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

我想排序按升序或降序不是按字母順序。 應該要考慮的月份和年份排序我想排序給予列升序和降序按月份和年份按字母順序排列

升序答案應該是像

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

mysql或SQL-Server? – Jens

+0

我正在使用sql-server,我需要在sql-server – Rahul

回答

1

你可以使用這個,如果所有的日期是有效的:

SELECT monthtext 
FROM 
    (values 
    ('2016july'),('2016september'),('2016december'),('2016january'), 
    ('2017february'),('2017june'),('2017march')) x(monthtext) 
ORDER BY cast(monthtext as date) 
+1

太棒了!這是一個簡單的方法.. –

+0

謝謝你sir @ShakeerMirza它的工作很好回答簡單的方法。 – Rahul

0

事情是這樣的:

你應該再添個月也case聲明

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 
+0

@Oto Shavadze先生你釘了它。那是正確的,謝謝你! – Rahul

+0

@Rahul - 不客氣 –

0

您需要將其拆分爲年份&月然後應用Order By子句。

模式:

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 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 | 
+---------------+--------+---------+ 
+0

謝謝你@Shakeer先生。 – Rahul

+0

歡迎@Rahul –