Страница 1 из 1
Вопрос по сортировке в Firebird 2 в charset WIN1251
Добавлено: 01 дек 2007, 15:23
Kotъ-Begemotъ
Для 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 ? Есть такой способ, или это импоссибл?
Добавлено: 02 дек 2007, 15:41
kdv
1. числа в строках сортируются всегда одинаково. даже в виде имен файлов в виндах, например.
2. порядки сортировки влияют только на сортировку символов и национальных символов
Есть такой способ, или это импоссибл?
сортировать числа как числа.
Добавлено: 02 дек 2007, 16:15
Kotъ-Begemotъ
kdv писал(а):сортировать числа как числа.
Не получается. Вернее по-старому никак. Но в новом проекте я структуру местами меняю серьёзно, обойду, конечно. То есть в этой таблице у меня был суррогатный ключ на автоинкрементном поле, по которому и шла сортировка, но были места, где это не удобно... А тут про COLLATE почитал, вот и решил у спецов узнать, может не стоит велосипед изобретать? Оказывается всё же стОит

Ну, оно и к лучшему. В старой программе много чего руки чесались изменить в структуре данных, да вроде и лень, и ни к чему - работает нормально. А тут уж конечно мимо не пройдёшь, когда почти с нуля БД проектировать

Добавлено: 05 дек 2007, 13:06
Alex03
А добавить вычисляемое числовое поле, и сортировать сначала по нему, потом по оригинальному?
Добавлено: 05 дек 2007, 16:22
WildSery
Alex03 писал(а):А добавить вычисляемое числовое поле, и сортировать сначала по нему, потом по оригинальному?
Нет необходимости. FB2 умеет легко сортировать по выражению.
Добавлено: 07 дек 2007, 20:28
Kotъ-Begemotъ
WildSery писал(а):Alex03 писал(а):А добавить вычисляемое числовое поле, и сортировать сначала по нему, потом по оригинальному?
Нет необходимости. FB2 умеет легко сортировать по выражению.
То есть можно типа по StrToInt(Field) сортировку сделать? Через UDF? Но неоптимально будет, имхо

(
Добавлено: 07 дек 2007, 23:19
WildSery
Kotъ-Begemotъ писал(а):То есть можно типа по StrToInt(Field) сортировку сделать? Через UDF? Но неоптимально будет, имхо

(
Я про "вычисляемое поле" сказал. Там же тоже UDF придётся применять.
Теоретически можно забацать процедуру, которая вместе с данными выдаёт ещё и вытащенный int (без UDF).
И сортировать затем select * from proc order by ...
Либо для ускорения выборок дёргать int в триггере на вставку/обновление в отдельное поле.