![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
UPPER и COLLATE [D6, D7, IB6.x]
PSN © (2004-09-09 00:51:00)Здравствуйте.
Помогите пожалуйста разобраться с логикой работы функции UPPER.
Есть таблица.
CREATE TABLE ARTICLES (
TERMINAL_ID T_TERMINAL,
ARTICLE_ID INTEGER NOT NULL,
NAME VARCHAR(24) NOT NULL COLLATE PXW_CYRL,
NEWNAME VARCHAR(24) NOT NULL
);
В полях NAME и NEWNAME храняться одинаковые значения.
Результаты следующих двух запросов разные.
select UPPER(NAME) from ARTICLES Where UPPER(NAME) starting with UPPER(:NAME)
select UPPER(NEWNAME) from ARTICLES Where UPPER(NEWNAME) starting with UPPER(:NAME)
Для поля NAME UPPER приводит к верхнему регистру для NEWNAME нет.
Это и понятно - для NAME указан COLLATE. Но если и для NEWNAME указать COLLATE PXW_CYRL таким вот запросом:
update RDB$RELATION_FIELDS set RDB$COLLATION_ID = 1 where (RDB$FIELD_NAME = 'NEWNAME') and RDB$RELATION_NAME = 'ARTICLES')
то все равно UPPER не работает.
Подскажите какие пути решения есть для данной проблемы? Или COLLATE можно указывать только при создании таблицы?
Да и еще успользую FireBird 1.0.2.908
С уважением Прищепа Сергей.
PSN (2004-09-09 01:11:00) [1]Спасибо большое Zacho © за статью http://www.ibase.ru/devinfo/ibrusfaq.htm
помог следующий кодUPDATE ARTICLES SET NEWNAME=NEWNAME
его нужно было выполнить после изменения COLLATE
update RDB$RELATION_FIELDS set RDB$COLLATION_ID = 1 where (RDB$FIELD_NAME = 'NEWNAME') and RDB$RELATION_NAME = 'ARTICLES')
Zacho (2004-09-09 01:01:00) [2]COLLATE ожно указать непосредственно в запросе.
А вообще по работе с русскими буквами есть хорошая статья - http://www.ibase.ru/devinfo/ibrusfaq.htm
Cobalt (2004-09-09 00:57:00) [3]Вообще-то, изменение полей логичнее делать ALTER Table