Поиск по blob строки с кириллицей

Евгений, Екатеринбург
Дата: 30.04.2012 20:39:53
Подскажите, как правильно составить запрос, чтобы найти строку кириллицей в blob-поле.
Информация в поле всегда только текстовая (делаю импорт из RTF), запрос вида
select * from rissued where rissued.textfile_data containing 'СП 52-101-2003'

не работает (не выдает найденных записей), а
select * from rissued where rissued.textfile_data containing '52-101-2003'

или
select * from rissued where rissued.textfile_data containing 'REI 120'

работает.
Заранее спасибо.
Гаджимурадов Рустам
Дата: 30.04.2012 20:51:01

Кириллица хранится в не в прямом виде, а "кодами", escape-последовательностями.
Соответственно, искать по ней обычным like-фильтром ты не сможешь - или придется
в параметр фильтр тоже записывать строку из escape-последовательностей.

P.S. Как обычно - начни с описания задачи.

Posted via ActualForum NNTP Server 1.5

Zim-a
Дата: 30.04.2012 20:57:55
Гаджимурадов Рустам
Кириллица хранится в не в прямом виде, а "кодами", escape-последовательностями.
Соответственно, искать по ней обычным like-фильтром ты не сможешь - или придется
в параметр фильтр тоже записывать строку из escape-последовательностей.

P.S. Как обычно - начни с описания задачи.


Уточню.
Это Вы про RTF формат?
Или про хранение в Firebird?

Ибо у меня на Firebird 1.5 всё работает хорошо.
Создано blob поле с CHARSET Win1251 и там хранятся тексты. И по нему всё ищет через CONTAINING с украинскими буквами.

Может автор просто CHARSET у поля не указал?
Гаджимурадов Рустам
Дата: 30.04.2012 21:04:34

Zim-a> Уточню. Это Вы про RTF формат? Или про хранение в Firebird?

Про RTF, конечно.

Zim-a> Ибо у меня на Firebird 1.5 всё работает хорошо.
Zim-a> Создано blob поле с CHARSET Win1251 и там хранятся тексты.

Так у Вас в поле хранится текст, а не RTF-текст.

Posted via ActualForum NNTP Server 1.5

Евгений, Екатеринбург
Дата: 30.04.2012 21:07:37
Гаджимурадов Рустам
Кириллица хранится в не в прямом виде, а "кодами", escape-последовательностями.
Соответственно, искать по ней обычным like-фильтром ты не сможешь - или придется
в параметр фильтр тоже записывать строку из escape-последовательностей.

P.S. Как обычно - начни с описания задачи.



Задача такая: в тексте (в blob'е) содержаться ссылки на различные документы, есть таблица этих документов
CREATE TABLE RSTANDART (
    STD_ID     INTEGER NOT NULL,
    STD_SHIFR  VARCHAR(255),
    STD_NAME   VARCHAR(1024)
);

Таблица в которой содержится блоб
CREATE TABLE RISSUED (
    ISSUED_ID        INTEGER NOT NULL,
    ALBUM_ID         INTEGER,
    STATUS_ID        INTEGER NOT NULL,
    REP_USER_ID      INTEGER,
    ISSUED_NUMBER    INTEGER NOT NULL,
    TEXTFILE_DATA    BLOB SUB_TYPE 0 SEGMENT SIZE 16384,
    PROJMAN_ID       INTEGER DEFAULT 1 NOT NULL,
    LEAD_CPEC_ID     INTEGER DEFAULT 1 NOT NULL,
    NORM_CHECKER_ID  INTEGER DEFAULT 9 NOT NULL,
    CHECKER_ID       INTEGER DEFAULT 2 NOT NULL
);

Необходимо найти в тексте на какие из документов есть ссылки, т.е. найти STD_ID, тех документов, для которых в тексте содержится STD_SHIFR.
Т.е. надо по конкретному ISSUED_ID получить список STD_ID на который содержатся ссылки в поле TEXTFILE_DATA.
В принципе, STD_SHIFR, это всегда обозначение в котором сначала буквы, а потом цифры (например ГОСТ 21.501-93). Может проще обрезать буквы и делать поиск только по цифрам?
Евгений, Екатеринбург
Дата: 30.04.2012 21:09:14
Zim-a
Может автор просто CHARSET у поля не указал?

забыл указать - win1251 указано для базы, сервер 2.5.
Текст нужен именно RTF.
Гаджимурадов Рустам
Дата: 30.04.2012 21:28:24

Евгений, Екатеринбург> Необходимо найти в тексте на какие из документов есть ссылки, т.е.
Евгений, Екатеринбург> найти STD_ID, тех документов, для которых в тексте содержится STD_SHIFR.
Евгений, Екатеринбург> Т.е. надо по конкретному ISSUED_ID получить список STD_ID
Евгений, Екатеринбург> на который содержатся ссылки в поле TEXTFILE_DATA.

Как связаны шифр (STD_SHIFR VARCHAR) и текст документа (TEXTFILE_DATA BLOB) ?

Posted via ActualForum NNTP Server 1.5

Гаджимурадов Рустам
Дата: 30.04.2012 21:30:39

Евгений, Екатеринбург> Может проще обрезать буквы и делать поиск только по цифрам?

Тут, ИМХО, нужно о проектировании задуматься, в частности, нормализации.
Если есть каталог шифров - ссылки на него должны быть заданы явно.
Тем более, если этих ссылок может быть более одного на документ.
То бишь добавляйте таблицу связи M:N. Может даже статься, что в
будущем это Вам очень пригодится для каких-то других целей

Posted via ActualForum NNTP Server 1.5

Dimitry Sibiryakov
Дата: 30.04.2012 21:40:30

Евгений, Екатеринбург
Текст нужен именно RTF.

Если в поле лежит RTF, то искать в нём русский plain text - бесполезно.

Posted via ActualForum NNTP Server 1.5

Zim-a
Дата: 30.04.2012 21:50:07
Почему бы тогда отдельно поле для хранения простого текста этого RTF документа не завести?
Или тупить будет при поиске?