Вопрос по сортировке в Firebird 2 в charset WIN1251
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Вопрос по сортировке в Firebird 2 в charset WIN1251
Для Charset WIN1251 есть три возможных вида сортировки:
collation WIN1251
collation PXW_CYRL
collation WIN1251_UA
Чем они отличаются?!? В частности интересует такой вопрос: вот есть у меня таблица с полем CHAR (10) для хранения "позывного". Почему CHAR - потому что теоретически может быть число, а может имя. Так вот - сортировка в Paradox была соответствующая Firebird'овской PXW_CYRL - то есть 1, 10, 100, 2, 20...
А нельзя ли отсортировать "как числа" этот текст? То есть 1, 2, 10, 20, 100 ? Есть такой способ, или это импоссибл?
collation WIN1251
collation PXW_CYRL
collation WIN1251_UA
Чем они отличаются?!? В частности интересует такой вопрос: вот есть у меня таблица с полем CHAR (10) для хранения "позывного". Почему CHAR - потому что теоретически может быть число, а может имя. Так вот - сортировка в Paradox была соответствующая Firebird'овской PXW_CYRL - то есть 1, 10, 100, 2, 20...
А нельзя ли отсортировать "как числа" этот текст? То есть 1, 2, 10, 20, 100 ? Есть такой способ, или это импоссибл?
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Не получается. Вернее по-старому никак. Но в новом проекте я структуру местами меняю серьёзно, обойду, конечно. То есть в этой таблице у меня был суррогатный ключ на автоинкрементном поле, по которому и шла сортировка, но были места, где это не удобно... А тут про COLLATE почитал, вот и решил у спецов узнать, может не стоит велосипед изобретать? Оказывается всё же стОитkdv писал(а):сортировать числа как числа.
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Я про "вычисляемое поле" сказал. Там же тоже UDF придётся применять.Kotъ-Begemotъ писал(а):То есть можно типа по StrToInt(Field) сортировку сделать? Через UDF? Но неоптимально будет, имхо(
Теоретически можно забацать процедуру, которая вместе с данными выдаёт ещё и вытащенный int (без UDF).
И сортировать затем select * from proc order by ...
Либо для ускорения выборок дёргать int в триггере на вставку/обновление в отдельное поле.