2013-08-02 211 views
1

我有一個表'MyTable',下面的列ID varchar(50)。在sql中排序字母數字列

ID 
---------- 
10 
100 
700-6 0110B512 
700-6 0110B513 
700-8 0110B512 
700-9 0110B512 

我需要排序與輸出此列

ID 
---------- 
10 
100 
700-6 0110B512 
700-8 0110B512 
700-9 0110B512 
700-6 0110B513 

請幫助!

我已經嘗試過,但輸出不符合要求。

SELECT * FROM MyTable 
ORDER BY 
Case  
When IsNumeric(ID) = 1 then LEFT(Replicate('0',101) + ID, 100) 
When IsNumeric(ID) = 0 then RIGHT(Replicate('0',101) + ID, 100) 
Else ID 
END 
ASC 
+0

Isnumeric(id)= 1是否被擊中?字段ia varchar? – lloydom

+0

它會被擊中10和100! –

+0

你最多有三位數字嗎?那麼1,10,100,700但不是1000,2000,10000? – xanatos

回答

1
DECLARE @t table(id varchar(50)) 
INSERT @t values ('10') 
INSERT @t values('100') 
INSERT @t values('700-6 0110B512') 
INSERT @t values('700-6 0110B513') 
INSERT @t values('700-8 0110B512') 
INSERT @t values('700-9 0110B512') 

SELECT * 
FROM @t 
ORDER BY cast(left(id, 3) as int), stuff(id, 1, 6, ''), substring(id, 5,1) 
1

假設固定的前/後整數,我覺得這是最簡單的可能是:

SELECT * 
FROM table1 
ORDER BY LEFT(id,3) ,RIGHT(id,3) ,ID 

SQL Fiddle

能投任一部分作爲INT如果需要的話,不明確來自樣本。

+1

在100之後加20,但問題中沒有說這是錯誤的,所以...... :) –