2016-01-25 71 views
0

我需要對字母數字和數字排序應用排序。SQL Server中的字母數字和數字排序

實施例:

319, 
519, 
620, 
1154, 
1195, 
319lov, 
319, 
620lov 

我需要導致像:

319, 
319, 
319lov, 
519, 
620, 
620lov, 
1154, 
1195, 

我已應用下面的代碼來進行排序:

SELECT Name 
FROM TableName 
ORDER BY CAST(CASE 
       WHEN Name LIKE '[0-9][0-9][0-9][0-9]%' THEN LEFT(Name ,4) 
       WHEN Name LIKE '[0-9][0-9][0-9]%' THEN LEFT(Name ,3) 
       ELSE NULL 
       END AS INT) 

GOT導致像:

319, 
319lov, 
319, 
519, 
620, 
620lov, 
1154, 
1195, 
+1

[http://stackoverflow.com/questions/16862147/sorting-varchar-column-with-alphanumeric-entries](http://stackoverflow.com/questions/16862147/sorting-varchar-列與字母數字條目) – CoSpringsGuy

+0

'AS INT'後'只需添加',Name' – JamieD77

+0

@ JamieD77它工作良好。謝謝 –

回答

0
SELECT name FROM t 
ORDER BY CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name+'z')-1)),name; 

您可以通過所有數字直到第一個非數字進行排序,該字母在那裏用於處理所有字符串相同。

FIDDLE

+1

不,[反例](https://data.stackexchange.com/stackoverflow/query/427747)。 – lad2025

+0

@ lad2025你是對的 – Mihai

+0

謝謝@Mihai現在工作很好。 –