我有一个表'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
答案 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
如果需要,可以将任一部分转换为INT
,但不能从样本中清除。