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