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

Функция

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

Спецификация
 
<​синтаксис​>::=
<​подстрока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 |