1

我有一个表“MyTable”,其后面的列 ID 为 varchar(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
4

2 回答 2

1

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

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

SQL小提琴

如果需要,可以铸造任一部分INT,从样本中不清楚。

于 2013-08-02T11:24:57.757 回答
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)
于 2013-08-02T10:41:06.773 回答