2013-08-02 182 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,但问题中没有说这是错误的,所以...... :) –