Выборка текста (GETTEXT)
Функция
Получение заданной порции текстовых данных.
Спецификация
::=::=Синтаксические правила
-
<Имя столбца>должно принадлежать столбцу, тип данных которого позволяет создавать для него фразовый индекс (см. документ «Полнотекстовый поиск в базе данных», пункт «Выборка порции текста внешнего файла»). Сам индекс при этом может и не существовать. -
<Смещение>– целое положительное число, задающее начальную позицию требуемой порции текста. Первый символ текста имеет смещение 1. -
<Длина>– размер требуемой порции текста в символах (целое число в диапазоне от 1 до 2000). Количество символов (и смещение) задаётся в символах оригинального документа. Если у пользователя стоит кодировка MBCS или UTF-8, то длина результата преобразования может превысить 4000 байт, разрешённых для столбца. В результате часть данных не будет передана. Нужно учитывать эту особенность в случае, когда извлекаются непрерывные куски текста несколькими порциями. -
Аргумент
<смещение>может быть задан<SQL-параметром>, который должен содержать спецификацию типа данных параметра.create or replace table test(c char(100)); insert into test(c) values ('Мы едем, едем, едем в далёкие края'); select gettext(c, ? (int), 20) from test; 15 | едем в далёкие края |
Возвращаемое значение
-
Возвращается затребованная порция прошедшего через фразовый фильтр текста, определяемая указанными смещением и длиной.
-
В возвращаемом значении порция текста после последнего символа текста столбца заполняется пробелами.
-
Если размер требуемой порции текста превышает
2000символов, то возвращается 2000 символов текста, а оставшаяся часть результата заполняется пробелами. -
Для файлов типа
XMLиHTMLфункция возвращает только чистый текст (пары «атрибут-значение» игнорируются). -
Значение
NULLвозвращается в случае, если один из параметров имеет значениеNULL, если требуемый файл не существует (для столбца типаEXTFILE) или если в процессе получения требуемой порции текста произошла ошибка. -
Правила выбора фразового фильтра совпадают с правилами, используемыми при создании фразового индекса со значениями флагов, принятыми по умолчанию для данного типа столбца (см. функцию
create phrase indexв документе «Полнотекстовый поиск в базе данных», пункт «Создание фразового индекса»). -
Даже если в системной таблице
$$$CHARSETне задана кодировка866,1251или20866, то перекодировка текста все равно будет выполнена правильно с помощью встроенных в СУБД ЛИНТЕР внутренних таблиц кодировки. В противном случае символы с кодами меньше0x80извлекаются как есть (подразумевается 7-битныйASCII), а остальные символы заменяются на '?'.
Примечание
Поскольку выдается текст, прошедший через фильтр, в нем могут отсутствовать знаки препинания, символы разметки.
Пример
Найти позицию третьего повторения фразы «баз данных» в документе с идентификатором 10:
select instr(gettext(text_doc,1,1500),'баз данных',1,3) from "ph" where id_doc=10;