Перейти к содержимому
Последнее обновление

REPLACE_EMPTY

Описание​

Функция REPLACE_EMPTY используется для замены части символов в строке другими символами. В отличие от функции REPLACE, если old является пустой строкой, строка new вставляется перед каждым символом строки str и в конце строки str.

Эта функция предназначена прежде всего для обеспечения совместимости с Presto и Trino. Её поведение полностью совпадает с поведением функции REPLACE() в Presto и Trino. Поддерживается начиная с версии 2.1.5.

Синтаксис​

REPLACE_EMPTY ( <str>, <old>, <new> )

Параметры​

ПараметрОписание
<str>Строка, в которой нужно выполнить замену.
<old>Подстрока, которую нужно заменить. Если <old> отсутствует в <str>, замена не выполняется. Если <old> является пустой строкой, строка <new> вставляется перед каждым символом строки str.
<new>Новая подстрока для замены <old>.

Возвращаемое значение​

Возвращает VARCHAR: новую строку после замены подстроки. Особые случаи:

  • Если хотя бы один параметр равен NULL, возвращает NULL.
  • Если <old> является пустой строкой, возвращает строку, в которой <new> вставлена перед каждым символом <str> и в конце.
  • Если <old> не найдена в <str>, возвращает <str> без изменений.

Примеры​

Для сравнения: REPLACE заменяет каждое вхождение <old>, оставляя остальную часть строки без изменений:

SELECT replace('hello world', 'world', 'universe');
+---------------------------------------------+
| replace('hello world', 'world', 'universe') |
+---------------------------------------------+
| hello universe |
+---------------------------------------------+

Функция REPLACE_EMPTY работает так же в обычном случае (см. пример 2 ниже), но ведёт себя иначе, когда <old> является пустой строкой: тогда она вставляет <new> перед каждым символом <str> и в конце (пример 1). Остальные примеры показывают граничные случаи.

  1. Базовое использование: вставка, когда <old> является пустой строкой.
SELECT replace_empty('abc', '', 'x');
+-------------------------------+
| replace_empty('abc', '', 'x') |
+-------------------------------+
| xaxbxcx |
+-------------------------------+
  1. Обычная замена подстроки (поведение совпадает с REPLACE).
SELECT replace_empty('hello', 'l', 'L');
+----------------------------------+
| replace_empty('hello', 'l', 'L') |
+----------------------------------+
| heLLo |
+----------------------------------+
  1. Пустая строка <str> вместе с пустой строкой <old>.
SELECT replace_empty('', '', 'x');
+----------------------------+
| replace_empty('', '', 'x') |
+----------------------------+
| x |
+----------------------------+
  1. Распространение NULL.
SELECT replace_empty(NULL, 'old', 'new');
+-----------------------------------+
| replace_empty(NULL, 'old', 'new') |
+-----------------------------------+
| NULL |
+-----------------------------------+
  1. Многобайтовая (UTF-8) строка <new>.
SELECT replace_empty('hello', 'l', 'ṭṛìṭ');
+--------------------------------------------+
| replace_empty('hello', 'l', 'ṭṛìṭ') |
+--------------------------------------------+
| heṭṛìṭṭṛìṭo |
+--------------------------------------------+