Замена всех подстрок

Функция

Замена всех подстрок в заданной строке.

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

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

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

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

  5. < Подстрока1 > задает удаляемое из < строки > значение.

  6. < Подстрока2 > задает вставляемое вместо удаленной < подстроки1 > значение.

  7. Если < подстрока2 > не задана, по умолчанию используется пустая строка (т.е. в этом случае происходит фактически удаление < подстроки1 >.

    create or replace table tst (str char(20));
    insert into tst values ('123456789abcdef');
    select replace(str, '123','321') from tst;
    
    |321456789abcdef     |
    
    select replace(str, '123') from tst;
    
    |456789abcdef        |

  8. Длины < подстроки1 > и < подстроки2 > в байтах должна быть равны.

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

    select replace  (? (char(20)), ? (char(5)), ? (char(5)));
    11 22 311 55
    11
    aa
    |aa 22 3aa 55        |
Возвращаемое значение
  1. Исходная < строка >, в которой все вхождения < подстроки1 > заменены на < подстроку2 >.

  2. Если значение < подстроки1 > в < строке > не найдено, < строка > возвращается без изменений.

  3. Результирующая строка возвращается без концевых пробелов.

  4. Если один из аргументов имеет значение NULL, результат будет NULL.

  5. Если аргумент < строка > имеет нулевую длину, возвращается пустая строка.

    select replace('','1','2');
Примеры
select replace('123452367238','23','abcdd');
| 1abcdd45abcdd67abcdd8 |
select replace('123452367238','23','a');
| 1a45a67a8 |

Удаление всех вхождений подстроки:

select replace('123452367238','23', '');
| 145678 |
select replace('123452367238','bb','abc');
| 123452367238 |