2013-08-02 1 views
1

У меня есть таблица «MyTable» со следующим столбцом, ID varchar (50).сортировка буквенно-цифровой колонки в sql

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

Isnumeric (id) = 1 получить удар вообще? поле ia varchar? – lloydom

+0

Он получит удар за 10 и 100! –

+0

У вас есть максимум три цифры? Итак, 1, 10, 100, 700, но не 1000, 2000, 10000? – xanatos

ответ

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

Предполагая, что фиксированный ведущую/ведомый целые числа, я думаю, что это самое простое это может быть:

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

SQL Fiddle

Может отбрасывать либо часть, как INT в случае необходимости, не ясно из образца.

+1

Делает 20 после 100, но в этом нет ничего, говоря, что это неправильно, так что ... :) –

Смежные вопросы