Вопрос по сортировке в Firebird 2 в charset WIN1251

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Вопрос по сортировке в Firebird 2 в charset WIN1251

Сообщение Kotъ-Begemotъ » 01 дек 2007, 15:23

Для 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 ? Есть такой способ, или это импоссибл?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 дек 2007, 15:41

1. числа в строках сортируются всегда одинаково. даже в виде имен файлов в виндах, например.
2. порядки сортировки влияют только на сортировку символов и национальных символов
Есть такой способ, или это импоссибл?
сортировать числа как числа.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 02 дек 2007, 16:15

kdv писал(а):сортировать числа как числа.
Не получается. Вернее по-старому никак. Но в новом проекте я структуру местами меняю серьёзно, обойду, конечно. То есть в этой таблице у меня был суррогатный ключ на автоинкрементном поле, по которому и шла сортировка, но были места, где это не удобно... А тут про COLLATE почитал, вот и решил у спецов узнать, может не стоит велосипед изобретать? Оказывается всё же стОит :) Ну, оно и к лучшему. В старой программе много чего руки чесались изменить в структуре данных, да вроде и лень, и ни к чему - работает нормально. А тут уж конечно мимо не пройдёшь, когда почти с нуля БД проектировать :)

Alex03
Сообщения: 15
Зарегистрирован: 16 ноя 2005, 19:02

Сообщение Alex03 » 05 дек 2007, 13:06

А добавить вычисляемое числовое поле, и сортировать сначала по нему, потом по оригинальному?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 05 дек 2007, 16:22

Alex03 писал(а):А добавить вычисляемое числовое поле, и сортировать сначала по нему, потом по оригинальному?
Нет необходимости. FB2 умеет легко сортировать по выражению.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 07 дек 2007, 20:28

WildSery писал(а):
Alex03 писал(а):А добавить вычисляемое числовое поле, и сортировать сначала по нему, потом по оригинальному?
Нет необходимости. FB2 умеет легко сортировать по выражению.
То есть можно типа по StrToInt(Field) сортировку сделать? Через UDF? Но неоптимально будет, имхо :((

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 07 дек 2007, 23:19

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

Ответить