MySQL 'Order By' - сортировка буквенно-цифровых символов - PullRequest
52 голосов
/ 19 декабря 2011

Я хочу отсортировать следующие элементы данных в том порядке, в котором они представлены ниже (цифры 1-12):

1
2
3
4
5
6
7
8
9
10
11
12

Однако мой запрос - с использованием сортировки order by xxxxx asc по первой цифре выше всехеще:

1
10
11
12
2
3
4
5
6
7
8
9

Есть ли уловки, чтобы заставить его сортироваться более правильно?

Кроме того, в интересах полного раскрытия, это может быть сочетание букв и цифр (хотя сейчас этонет), например:

A1
534G
G46A
100B
100A
100JE

и т. д. *

Спасибо!

обновление: люди, запрашивающие запрос

select * from table order by name asc

Ответы [ 12 ]

0 голосов
/ 16 июля 2017

ВЫБРАТЬ s.id, s.name, LENGTH (s.name) len, ASCII (s.name) ASCCCI FROM table_name s ЗАКАЗАТЬ ASCCCI, len, ИМЯ ASC;

0 голосов
/ 04 июля 2017

Это должно отсортировать буквенно-цифровое поле, например: 1 / Только число, order by 1,2,3,4,5,6,7,8,9,10,11 и т. Д ... 2 / Затем поле с текстом, например: 1foo, 2bar, aaa11aa, aaa22aa, b5452 и т. Д.

SELECT  MyField
FROM MyTable
order by 
    IF( MyField REGEXP '^-?[0-9]+$' = 0, 
    9999999999 ,  
    CAST(MyField AS DECIMAL) 
    ), MyField

Запрос проверки, еслиданные - это число, если не указать 9999999999, то сначала укажите порядок в этом столбце, затем укажите данные с текстом

Удачи!

...