在sql中排序一个字母数字列

时间:2013-08-02 10:31:11

标签: sql sql-server-2005

我有一个表'MyTable',其中包含以下列ID IDchar(50)。

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

假设固定的前导/尾随整数,我认为这是最简单的:

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

SQL Fiddle

如果需要,可以将任一部分转换为INT,但不能从样本中清除。