2014-12-18 3 views
1

Скажем, у меня есть таблица, и я хочу заказать по полю с некоторой строкой и размером. Когда я использую ORDER BY size, он получает что-то вроде этого:Строка заказа в цифровом порядке

size 100 
size 105 
size 110 
size 115 
size 85 
size 90 
size 95 

Строка может быть различным в каждой строке, это просто пример, когда есть та же строка - size. Я хочу вернуть это:

size 85 
size 90 
size 95 
size 100 
size 105 
size 110 
size 115 

Я знаю, что упорядочение по числовой последовательности может быть сделано с ORDER BY CAST(size AS UNSIGNED), но как это сделать, когда его не числовая строка, но поле строка с номером?

Спасибо за любую помощь.

ответ

3

Я простой способ сделать это, чтобы использовать длину в качестве ключа:

order by length(size), size 

В качестве альтернативы, используйте substring_index():

order by substring_index(size, ' ', 1), 
     substring_index(size, ' ', -1) + 0 

+ 0 делает бесшумное преобразование для преобразования второго значения к номер.

+0

Мне нравится ваш первый. – Kaf

+0

'порядок по длине (размер), размер' сделал трюк :-) большое спасибо. Я должен знать это, его логическое :-) – Legionar

1

Вы частично правы. Вы могли бы просто получить номер из своего буквенного столбца

SELECT * 
FROM  MyTable 
ORDER BY CAST(SUBSTRING(size, LOCATE(' ',size)+1) AS SIGNED) 
+0

спасибо, но строка может быть разной, т. Е. 'red pattern 45',' red pattern 50', 'red pattern 55', etc ... – Legionar

+0

Вы имеете в виду, что у вас будет размер 45, красный узор 45 и т. д.? – SMA

+0

строка одинакова для каждого продукта, 'порядок по длине (размер), размер' сделал трюк; в строке может быть больше пробелов, но +1 для попытки помочь – Legionar

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