Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 292
от 24.10.2007, 14:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 453, Экспертов: 51
В номере:Вопросов: 1, Ответов: 6


Вопрос № 106054: Здравствуйте! Подскажите, пожалуйста, как отсортировать строки по текстовому полю, в котором хранятся числа? При этом чтобы сравнение происходило, именно как с числами. Т.е. натуральная сортировка... Спасибо...

Вопрос № 106.054
Здравствуйте!
Подскажите, пожалуйста, как отсортировать строки по текстовому полю, в котором хранятся числа? При этом чтобы сравнение происходило, именно как с числами.

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

Приложение:

Отправлен: 19.10.2007, 13:41
Вопрос задал: Stals (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Vas177
Здравствуйте, Stals!

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

order by To_Number( СТРОКА )
Ответ отправил: Vas177 (статус: 1-ый класс)
Ответ отправлен: 19.10.2007, 13:53

Отвечает: Delph
Здравствуйте, Stals!

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

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

Этот оператор отсортирует сначала по длине строк, а строки с одинаковыми длинами - по содержимому этих строк. Должно сработать. Вместо Field_Name подставьте реальное название Вашего текстового поля.
---------
Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: Студент)
Ответ отправлен: 19.10.2007, 14:15
Оценка за ответ: 4

Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, Stals!
...
ORDER BY Field * 1
Не знаю примет ли MySql, MsSQL эту строку понимает.
Евгений.
Ответ отправил: Тесленко Евгений Алексеевич (статус: Студент)
Ответ отправлен: 19.10.2007, 20:38
Оценка за ответ: 5
Комментарий оценки:
MySql все понял, да и я заодно тоже... :)

Отвечает: Errandir
Здравствуйте, Stals!

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

SELECT * FROM tab ORDER BY CAST(strnum AS INTEGER);
---------
Si vox est - canta!
Ответ отправил: Errandir (статус: 5-ый класс)
Ответ отправлен: 19.10.2007, 23:20

Отвечает: Челноков Виктор Альбертович
Здравствуйте, Stals!
Попробуйте для sql2000-2005
order by convert(int, id)
т.е. преобразовать поле к числовому типу, но если в поле будут значения не числового типа то будет ошибка.
Ответ отправил: Челноков Виктор Альбертович (статус: 3-ий класс)
Ответ отправлен: 21.10.2007, 11:43

Отвечает: Dubrovin
Здравствуйте, Stals!

конвертни строку в число и сортируй )
Ответ отправил: Dubrovin (статус: 2-ой класс)
Ответ отправлен: 22.10.2007, 12:45


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное