Корректировка подстроки в заданной строке (удаление подстроки или ее замена).
Варианты:
::=
::=
<Символьное выражение>
в аргументе может иметь следующие типы данных: 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-значение.
<Строка>
со вставленной <подстрокой>
.
Код завершения при неправильном значении аргумента функции.