Корректировка подстроки
Функция
Корректировка подстроки в заданной строке (удаление подстроки или ее замена).
Спецификация
Варианты:
::=
::=
Общие правила
-
<Символьное выражение>
в аргументе может иметь следующие типы данных:CHAR
,VARCHAR
,NCHAR
,NCHAR VARYING
, символьное BLOB-значение. -
Типы данных
<строки>
и<подстроки>
должны быть приводимыми. -
<Числовое выражение>
должно быть целочисленным значением или приводиться к нему. -
Длина
<подстроки>
не должна быть более 4000. -
<Позиция>
задает позицию в символах заменяемой подстроки в<строке>
. Отсчет начинается с единицы. -
<Длина>
задает количество заменяемых в<строке>
символов. -
<Подстрока>
задает заменяющее в<строке>
значение. -
Все аргументы функции могут быть заданы
, который должен содержать спецификацию типа данных параметра.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-значение.
Возвращаемое значение
-
<Строка>
со вставленной<подстрокой>
. -
Код завершения при неправильном значении аргумента функции.