2010-12-09 36 views
0

我需要爲nvarchar列進行排序。問題是這樣的,列沒有條目相同的模式,列的一些行的例子是Order By子句用於SQL Server中的NVARCHAR列

12  
9  
TEF  
78F  
T2R 

如何此列由ORDER BY子句排序?我唯一的解釋是這個列只包含數字和字母數字字符。

+2

什麼是你所面臨的問題? `order by `不起作用? – 2010-12-09 11:19:59

+0

@Sachin不,它工作不正常。通過這樣做,感覺它並不是按照記錄排序 – Zerotoinfinity 2010-12-09 11:28:34

+0

那麼它如何對你的示例列進行排序? – 2010-12-09 11:29:39

回答

4
ORDER BY 
    RIGHT(REPLICATE(N' ', 500) + MyValue, 500) 

所以

9 
12 
78F 
T2R 
TEF 

成爲

  9 
      12 
      78F 
      T2R 
      TEF 

這將排序正確

你不能依靠ISNUMERIC

2
select 
    * 
from 
    table 
order by 
    CASE 
     WHEN not column like '%[^0-9]%' THEN CONVERT(int,column) 
     WHEN column like '[0-9]%' THEN CONVERT(int,SUBSTRING(column,1,PATINDEX('%[A-Z]%',column)-1)) 
    END, 
    CASE 
     WHEN not column like '%[^0-9]%' THEN NULL 
     WHEN column like '[0-9]%' THEN SUBSTRING(column,PATINDEX('%[A-Z]%',column),9000) 
     ELSE column 
    END