MySQL натуральный сорт - PullRequest
0 голосов
/ 18 июля 2011

У меня есть пример номера в формате:

1.1
1.1.4
1.1.5
2.1
2.1.10
2.1.23
3.1a
3.1b
4.1.5
4.2.6
4.7.12

Как мне отсортировать его в MySQL?Я могу сделать это легко с помощью опции командной строки $ sort, но в MySQL, похоже, ничего не работает

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

Это может сработать, если разбить строку на части и упорядочить по каждой соответствующей части.

SELECT data
FROM example
ORDER BY
    CAST(SUBSTRING_INDEX(data, '.', 1) AS BINARY) ASC,
    CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data , '.', 2), '.', -1) AS BINARY) ASC,
    CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data , '.', -1), '.', 1) AS BINARY) ASC;

Не могу сказать, что я поддерживаю выполнение чего-то подобного в MySQL, но, думаю, это поможетВы должны быть, по крайней мере, с моими данными испытаний.Просто помните, что вам нужно отредактировать число, если вы измените количество элементов в строке.

2 голосов
/ 18 июля 2011

Попробуйте упорядочить по INET_ATON (для MySQL 3.23.15 и новее)

ORDER BY INET_ATON(some_field);

PS. Он работает для IP-адресов, не знаю, как он обрабатывает буквы

0 голосов
/ 18 июля 2011

Было ли что-то не так с ORDER BY?

Я попробовал:

CREATE TABLE example (data VARCHAR(30));
INSERT INTO example VALUES ('4.2.6'), ('1.1.5'), ('2.1.10'), ('3.1b'), ('2.1'), ('4.7.12'), ('1.1'), ('2.1.23'), ('1.1.4'), ('3.1a'), ('4.1.5');
SELECT * FROM example ORDER BY data;

... и, похоже, это сработало так, как вы хотели.(Я не могу гарантировать, что не существует какого-то углового случая, когда ваши реальные данные могут быть упорядочены не по тому, что вы считаете «естественным». Это скорее эвристический термин, чем точно определенный термин «искусство».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...