| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Сортировка строки как числа |
| Автор: Komatoz 28.2.2008, 10:22 | ||
| Есть поле House (№дома) - текстовое.. Его надо отсортировать так, чтобы было попорядку, а не 1 10 100 100А 197 197А 19Б 2 20 200
|
| Автор: Itsys 28.2.2008, 10:45 |
| А как вариант дополнительной колонки (decimal) и повесить тригер, который определяет последний символ число или нет, и если нет - то меняет А на .1, Б на .2, в на .3 и т.д. и конвертирует в число и запихивает его в эту колонку, а, дальше сортировать по ней? |
| Автор: Akina 28.2.2008, 10:57 | ||
Если бы буквы хранились в отдельной колонке (HouseNumber-HouseDigit), то
Однако при наличии буквы функция даст ошибку. Полагаю наиболее разумным изменение структуры, а если это невозможно - написание хранимой функции конвертации. Скажем, по описанному Itsys алгоритму. |
| Автор: Komatoz 28.2.2008, 11:00 | ||
| Уже несколько тысяч записей - колонку не добавить, что такое тригер - не работал с ними.. Добавлено @ 11:02 В оракл есть вот такое:
можно ли подобное сюда прикрутить? |
| Автор: Magnifico 28.2.2008, 11:07 | ||
| Попробуй в таком духе, я не думаю что у дома может быть префикс Щ ,Ч, Ю,Я ну в случае чего добавишь
|
| Автор: Komatoz 28.2.2008, 11:25 | ||
если делать
то выдает ошибку.. можно ли не использовать like, а использовать регулярные выражения (как в PHP)? |
| Автор: Itsys 28.2.2008, 11:25 | ||
| Magnifico, В этом случае у тебя не будут по порядку дома с индексами (А,Б....) т.е. может получиться, что дом с инексом Б будет раньше, чем А, тогда уж лучше так:
Добавлено через 1 минуту и 37 секунд Какую ошибку? |
| Автор: Magnifico 28.2.2008, 11:30 |
| Itsys да согласен! |
| Автор: Komatoz 29.2.2008, 01:54 |
| А что если: создать столбец и его как следует пронумеровать и при вызове селекта указывать сортировку по доп полю.. |
| Автор: Itsys 29.2.2008, 02:07 |
| Я тебе это в самом начале и советовал |
| Автор: Komatoz 29.2.2008, 03:11 |
| Где про это почитать - я это ниразу не юзал.. |
| Автор: Itsys 29.2.2008, 03:54 |
| Во http://www.intuit.ru/department/database/sql/14/sql_14.html для тебя, мог бы сам поискать в гугле. |
| Автор: Komatoz 29.2.2008, 05:32 |
| Сенкс.. Вдруг я бы нетуда зашел.. |
| Автор: SharedNoob 5.3.2008, 12:20 | ||
хм.
Принцип сортировки строки таков 1 10 2 20 3 30 но если добавить пробелы впереди и сделать строку одинаковой длинны то выйдет так '____1' '____2' '____3' '___10' '___20' '___30' собственно order by right(' '+ltrim(rtrim(House)),10) |
| Автор: nawok78 13.3.2008, 10:12 | ||
пример сортировки
|