Консультация № 106054
19.10.2007, 13:41
0.00 руб.
0 6 6
Здравствуйте!
Подскажите, пожалуйста, как отсортировать строки по текстовому полю, в котором хранятся числа? При этом чтобы сравнение происходило, именно как с числами.

Т.е. натуральная сортировка...
Спасибо

Приложение:
Нужно так :1020100но не так: 1010020

Обсуждение

Неизвестный
19.10.2007, 13:53
общий
это ответ
Здравствуйте, Stals!

Например, в ORACLE:

order by To_Number( СТРОКА )
Неизвестный
19.10.2007, 14:15
общий
это ответ
Здравствуйте, Stals!

Строго говоря нужно использовать функцию Cast, но её формат зависит от используемой СУБД. К тому же строка в принципе может содержать не только числа, но и нечисловые символы (знаки препинания, буквы... всё что угодно). Впрочем, попробуйте такой обобщённый вариант:

SELECT ...
FROM ...
ORDER BY Length(Field_Name), Field_Name

Этот оператор отсортирует сначала по длине строк, а строки с одинаковыми длинами - по содержимому этих строк. Должно сработать. Вместо Field_Name подставьте реальное название Вашего текстового поля.
Неизвестный
19.10.2007, 20:38
общий
это ответ
Здравствуйте, Stals!
...
ORDER BY Field * 1
Не знаю примет ли MySql, MsSQL эту строку понимает.
Евгений.
Неизвестный
19.10.2007, 23:20
общий
это ответ
Здравствуйте, Stals!

Вот это должно работать почти на всём:

SELECT * FROM tab ORDER BY CAST(strnum AS INTEGER);
Неизвестный
21.10.2007, 11:43
общий
это ответ
Здравствуйте, Stals!
Попробуйте для sql2000-2005
order by convert(int, id)
т.е. преобразовать поле к числовому типу, но если в поле будут значения не числового типа то будет ошибка.
Неизвестный
22.10.2007, 12:45
общий
это ответ
Здравствуйте, Stals!

конвертни строку в число и сортируй )
Форма ответа