Корректировка подстроки

Функция

Корректировка подстроки в заданной строке (удаление подстроки или ее замена).

Спецификация
   

Варианты:

<синтаксис>::=
<синтаксис>::=
Общие правила
  1. <Символьное выражение> в аргументе может иметь следующие типы данных: CHAR, VARCHAR, NCHAR, NCHAR VARYING, символьное BLOB-значение.

  2. Типы данных <строки> и <подстроки> должны быть приводимыми.

  3. <Числовое выражение> должно быть целочисленным значением или приводиться к нему.

  4. Длина <подстроки> не должна быть более 4000.

  5. <Позиция> задает позицию в символах заменяемой подстроки в <строке>. Отсчет начинается с единицы.

  6. <Длина> задает количество заменяемых в <строке> символов.

  7. <Подстрока> задает заменяющее в <строке> значение.

  8. Все аргументы функции могут быть заданы , который должен содержать спецификацию типа данных параметра.

    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       |
  9. Начиная с <позиции>, удаляется <длина> символов, и на место удаленных вставляются символы <подстроки>.

    select insert('12345',2,3, 'abcd');
    | 1abcd5 |
    
    select overlay('12345' placing 'abcd' from 2 for 3);
    |1abcd5 |
  10. В функции insert позиция вставки <подстроки> не должна превышать правую границу <строки>.

    select insert('12345',5,0, 'abcd');
    | 1234abcd5 |
    select insert('12345',5,1, 'abcd');
    | 1234abcd |

    Удаление подстроки:

    select insert('12345',1,3, '');
    | 45 |
  11. В функции overlay позиция вставки <подстроки> может быть за правой границей <строки>. В этом случае добавляемая <подстрока> просто присоединяется к <строке>.

    select overlay('12345' placing 'abcd' from 20);
    |12345abcd|
  12. В обеих функциях количество заменяемых символов, начиная от заданной <позиции>, может выходить за правую границу <строки>. В этом случае в <строке> удаляются все символы, начиная с <позиции> и до конца <строки>.

    select insert('12345',5,3, 'abcd');
    |1234abcd |
    
    select overlay('12345' placing 'abcd' from 3 for 30);
    |12abcd   |

  13. Если аргумент FOR <длина> не задан (или задано отрицательное значение), в качестве <длины> используется длина <подстроки>.

    select overlay('12345' placing 'abcd' from 2);
    |1abcd |
    
    select overlay('12345' placing 'abcd' from 2 for -10);
    |1abcd |

  14. Количество заменяемых символов может превышать количество удаляемых, т.е.:

    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;
  15. Длина <подстроки> в байтах должна быть в точности равна количеству байтов, соответствующим символам <длины>.

    Например, если заменяется часть строки из двух русских символов в кодировке 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Г            |

  16. Длина возвращаемого значения определяется как сумма длин <строки> и <подстроки> (ограничивается максимальным размером 4000 байт).

  17. Если хотя бы один из входных аргументов у функций равен NULL-значению, возвращается NULL-значение.

Возвращаемое значение
  1. <Строка> со вставленной <подстрокой>.

  2. Код завершения при неправильном значении аргумента функции.