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