Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / "Натуральная" сортировка / 11 сообщений из 11, страница 1 из 1
10.01.2005, 14:43
    #32857574
Argentum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
Как сделать так, чтобы SELECT возвращал записи отсортированные (по строковой колонке) в "натуральном" порядке, т.е. не
1
10
11
2
21
22
3

а
1
2
3
10
11
21
22
...
Рейтинг: 0 / 0
10.01.2005, 14:51
    #32857592
Boik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
SELECT * FROM table ORDER BY столбец ASK;
...
Рейтинг: 0 / 0
10.01.2005, 15:03
    #32857604
Argentum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
Спасибо!
Я лентяй, конечно, но сам нашёл ответ.
Вот так нужно было:
mysql> select number from (table) order by (number+0);
...
Рейтинг: 0 / 0
11.01.2005, 12:09
    #32858748
Guest123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
Argentum, ваш вариант не совсем корректен - если в столбце появится хоть одно символьное значение, то вместо результата запроса получится ошибка.

Правильней в таком случае получится запрос вида:
select number from (table) order by RIGHT(CONCAT('00'+number),3);
...
Рейтинг: 0 / 0
11.01.2005, 12:11
    #32858750
Guest123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
Извиняюсь, поторопился:
select number from (table) order by RIGHT(CONCAT('00',number),3);
...
Рейтинг: 0 / 0
11.01.2005, 12:25
    #32858779
sky2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
guest123Argentum, ваш вариант не совсем корректен - если в столбце появится хоть одно символьное значение, то вместо результата запроса получится ошибка.

Правильней в таком случае получится запрос вида:
select number from (table) order by RIGHT(CONCAT('00'+number),3);

почему ошибка?
select '123qwerty' + 0
выведет 123
...
Рейтинг: 0 / 0
12.01.2005, 16:15
    #32861579
Guest123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
Все верно, sky2k, в результате запроса будет получено именно "123", а не "123qwerty" - это разве является правильным результатом выполнения (представь, что в таблице есть и "123" и "123qwerty" и тебе надо различать эти записи)
...
Рейтинг: 0 / 0
13.01.2005, 00:35
    #32862227
sky2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
guest123в результате запроса будет получено именно "123", а не "123qwerty"

неправда
сравни запросы
из топика: select number from (table) order by (number+0);
запрос удовлетворяющий сказаному вами: select (number+0) as XXX from (table) order by XXX;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
08.08.2016, 11:40
    #39288172
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
Чтобы учитывались буквы после числе, достаточно добавить сортировку по строковому представлению:
SELECT string FROM (table) order by (string+0), (string);
...
Рейтинг: 0 / 0
08.08.2016, 11:43
    #39288178
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
Чтобы учитывались буквы после чисел, достаточно добавить сортировку по строковому представлению:
SELECT string FROM (table) ORDER BY (string+0), (string);

В таком случае сначала все отсортируется по числовому представлению ячеек, а в случае равенства приведения сортировка продолжится по строковому представлению ячеек.
...
Рейтинг: 0 / 0
08.08.2016, 12:21
    #39288212
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Натуральная" сортировка
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / "Натуральная" сортировка / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]