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

Функция

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

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

Варианты:

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

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

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

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

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

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

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

  8. Все аргументы функции могут быть заданы < 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       |
  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. Код завершения при неправильном значении аргумента функции.