Корректировка подстроки
Функция
Корректировка подстроки в заданной строке (удаление подстроки или ее замена).
Спецификация
Варианты:
::=
::=
Общие правила
-
< Символьное выражение >
в аргументе может иметь следующие типы данных:CHAR
,VARCHAR
,NCHAR
,NCHAR VARYING
, символьное BLOB-значение. -
Типы данных
< строки >
и< подстроки >
должны быть приводимыми. -
< Числовое выражение >
должно быть целочисленным значением или приводиться к нему. -
Длина
< подстроки >
не должна быть более 4000. -
< Позиция >
задает позицию в символах заменяемой подстроки в< строке >
. Отсчет начинается с единицы. -
< Длина >
задает количество заменяемых в< строке >
символов. -
< Подстрока >
задает заменяющее в< строке >
значение. -
Все аргументы функции могут быть заданы
< SQL-параметром >
, который должен содержать спецификацию типа данных параметра.select insert (? (char(20)),? (int), ?(int), ? (char(5))); 123 456 789 5 3 abcde |123 abcde 789 | select OVERLAY ('123 456 789' PLACING 'abcde' FROM 5 FOR 7); |123 abcde |
-
Начиная с
< позиции >
, удаляется< длина >
символов, и на место удаленных вставляются символы < подстроки >.select insert('12345',2,3, 'abcd'); | 1abcd5 | select overlay('12345' placing 'abcd' from 2 for 3); |1abcd5 |
-
В функции insert позиция вставки
< подстроки >
не должна превышать правую границу< строки >
.select insert('12345',5,0, 'abcd'); | 1234abcd5 |
select insert('12345',5,1, 'abcd'); | 1234abcd |
Удаление подстроки:
select insert('12345',1,3, ''); | 45 |
-
В функции overlay позиция вставки
< подстроки >
может быть за правой границей< строки >
. В этом случае добавляемая< подстрока >
просто присоединяется к< строке >
.select overlay('12345' placing 'abcd' from 20); |12345abcd|
-
В обеих функциях количество заменяемых символов, начиная от заданной
< позиции >
, может выходить за правую границу< строки >
. В этом случае в< строке >
удаляются все символы, начиная с< позиции >
и до конца< строки >
.select insert('12345',5,3, 'abcd'); |1234abcd | select overlay('12345' placing 'abcd' from 3 for 30); |12abcd |
-
Если аргумент FOR
< длина >
не задан (или задано отрицательное значение), в качестве< длины >
используется длина< подстроки >
.select overlay('12345' placing 'abcd' from 2); |1abcd | select overlay('12345' placing 'abcd' from 2 for -10); |1abcd |
-
Количество заменяемых символов может превышать количество удаляемых, т.е.:
select insert('12345',5,1, model) from auto; |1234MERCURY COMET GT V8 | |1234A-310 | …
select insert(model, length(model),1, 'Год выпуска: ') || to_char(year+1900, '9999') from auto;
-
Длина
< подстроки >
в байтах должна быть в точности равна количеству байтов, соответствующим символам< длины >
.Например, если заменяется часть строки из двух русских символов в кодировке UTF-8 (каждый занимает 2 байта), то её можно заменить либо на два других двухбайтовых символа, либо на 1 двухбайтовый символ и 2 однобайтных, либо на 4 однобайтных символа. Пример (для утилиты inl): create or replace table blb(bl blob character set "UTF-8"); insert into blb values (n'АБВГ'); select lenblob(bl,1), getblobstr(bl,1,4,1) from blb; | 4|АБВГ | update blb set bl=insert(bl,2,2,'1234'); select lenblob(bl,1), getblobstr(bl,1,6,1) from blb; | 6|А1234Г |
-
Длина возвращаемого значения определяется как сумма длин
< строки >
и< подстроки >
(ограничивается максимальным размером 4000 байт). -
Если хотя бы один из входных аргументов у функций равен NULL-значению, возвращается NULL-значение.
Возвращаемое значение
-
< Строка >
со вставленной< подстрокой >
. -
Код завершения при неправильном значении аргумента функции.