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