在sql中对字母数字列进行排序

在sql中对字母数字列进行排序,sql,sql-server-2005,Sql,Sql Server 2005,我有一个表'MyTable',后面的列是ID varchar(50) 我需要将此列与输出一起排序 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

我有一个表'MyTable',后面的列是ID varchar(50)

我需要将此列与输出一起排序

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

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

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


如果需要,可以将任一部分强制转换为
INT
,但示例中不清楚。

Isnumeric(id)=1是否被命中?这场比赛是瓦查尔吗?它会被打10分和100分!!你最多有三位数吗?那么1,10,100,700,而不是1000,2000,10000?它将始终是3位数字,大多数情况下仅为700。@mysql中的vijay如果您只从表名orderby列名中写入select*,那么它会自动排序,我不知道它在sql server 2005中是否工作。只需检查它100后的PUTS 20,但问题中并没有说这是错的,所以…:)
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)
SELECT *
FROM table1 
ORDER BY LEFT(id,3) ,RIGHT(id,3) ,ID