![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сортировка по varchar [Firebird]
zorik © (2008-04-18 12:20:00)есть поле name типа varchar с данными: 1, 2, 10, 1-р, 21, 3-е, ...
нужно "правильно" отсортировать данные по этому полю, тоесть:
1, 1-р, 2, 3-е, 10, 21, ...
order by name<code/> возвращает: 1, 10, 1-р, 2, 21, 3-е, ...
раньше я обходил эту проблему с использованием UDF - создавал допольнительное полеSORTNAME COMPUTED BY (mysort(name))<code/>, где функция mysort возвращала преобразованое поле, например
1-р -> 0001-р,
10 -> 0010,
...
какие будут решения, чтоб не использовать UDF?
zorik (2008-04-18 12:38:00) [21]Появилась идея!
В базе хранить 2 значения: номер (числовое) и приставку(текстовую). Логику реализовать на клиенте. Когда пользователь вводит или редактирует значение - разделять стринг на две части (левая числовая, а правая - текст) и записывать в базу 2 поля
Как только начал просить помощи, сразу идеи полезли )))
zorik (2008-04-18 12:33:00) [22]а нету в Firebird функций разделения строк. Можно бы было разделить тогда на числовую и текстовую часть?
Ega23 (2008-04-18 12:31:00) [23]Я обычно практически в любой таблице, где нужна сортировка, добавляю integer-поле Ord, в котором либо пользователь сам может нужный порядок проставить (чем меньше значение, тем "выше" запись будет во всех выборках), либо я сам могу этим делом управлять.
Правда не знаю, насколько в твоей ситуации этот вариант поможет...