MySQL ORDER_BY частичное целое число в строке - PullRequest
0 голосов
/ 01 января 2012

У меня есть ряд полей varchar в базе данных MySQL, которые «пронумерованы»:

+-----------+
| name      |
+-----------+
|  thing 1  |
|  thing 2  |
|  thing 3  |
|  ...      |
|  thing 10 |
|  thing 11 |
+-----------+

Я хочу заказать их, как указано выше.Однако простой ORDER_BY table.name производит что-то вроде следующего:

thing 1
thing 10
thing 11
thing 2
thing 3
...

Это имеет некоторый смысл, поскольку MySQL рассматривает все поле как строку (varchar).Тем не менее, я пробовал многочисленные методы сортировки, включая CAST(name AS DECIMAL) и name + 0.Это будет только сортировать по десятичной части, игнорируя строковую часть.Ничего из этого не работает, потому что мне нужно отсортировать по name сначала и , а затем по последнему десятичному числу.

Я пытался ORDER_BY name, name + 0, но, похоже, ничего не работает.Как мне выполнить и ORDER_BY, а затем ORDER_BY в этом подмножестве?(Я думаю, что это будет работать).

Ответы [ 2 ]

4 голосов
/ 01 января 2012

Вам нужно иметь два вида - сначала по части name, а затем по числовой части, например:

order by left(name,instr(name,' ')),cast(right(name,instr(name,' ')+1) as decimal)
0 голосов
/ 01 января 2012

Функция SUBSTRING_INDEX может разбивать строку.

SELECT SUBSTRING_INDEX(name, ' ', 1) AS a, CAST(SUBSTRING(name, ' ', -1) AS DECIMAL) AS b
FROM t
ORDER BY a, b
...