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

TRANSLATE

Описание​

Функция TRANSLATE выполняет посимвольную замену в строке, преобразуя символы исходной строки в соответствии с правилами сопоставления. Эта функция заменяет каждый символ исходной строки, который встречается в строке 'from', на символ, находящийся на той же позиции в строке 'to'.

Синтаксис​

TRANSLATE(<source>, <from>, <to>)

Параметры​

ПараметрОписание
<source>Исходная строка для преобразования. Тип: VARCHAR
<from>Набор символов, которые нужно заменить. Тип: VARCHAR
<to>Набор символов для замены. Тип: VARCHAR

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

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

Правила сопоставления символов:

  • Сопоставляет символы один к одному по их позициям в строках 'from' и 'to'
  • 1-й символ в 'from' соответствует 1-му символу в 'to', 2-й соответствует 2-му и так далее
  • Если в 'from' есть повторяющиеся символы, используется сопоставление для первого вхождения, а последующие повторения игнорируются
  • Символы исходной строки, которых нет в строке 'from', остаются без изменений

Особые случаи:

  • Если хотя бы один параметр равен NULL, возвращается NULL
  • Если исходная строка пустая, возвращается пустая строка
  • Если 'from' является пустой строкой, исходная строка возвращается без изменений
  • Если 'to' является пустой строкой, из исходной строки удаляются все символы, встречающиеся в 'from'
  • Если строка 'to' короче 'from', символы исходной строки, соответствующие лишним символам в 'from', удаляются

Примеры​

  1. Простая замена символа
SELECT TRANSLATE('abcd', 'a', 'z');
+-----------------------------+
| TRANSLATE('abcd', 'a', 'z') |
+-----------------------------+
| zbcd |
+-----------------------------+
  1. Замена каждого вхождения символа в исходной строке
SELECT TRANSLATE('abcda', 'a', 'z');
+------------------------------+
| TRANSLATE('abcda', 'a', 'z') |
+------------------------------+
| zbcdz |
+------------------------------+
  1. Сопоставление нескольких символов по позициям
SELECT TRANSLATE('abcd', 'ac', 'zx');
+-------------------------------+
| TRANSLATE('abcd', 'ac', 'zx') |
+-------------------------------+
| zbxd |
+-------------------------------+
  1. Повторяющиеся символы в <from> (используется только первое сопоставление)
SELECT TRANSLATE('abacad', 'aac', 'zxy');
+-----------------------------------+
| TRANSLATE('abacad', 'aac', 'zxy') |
+-----------------------------------+
| zbzyzd |
+-----------------------------------+
  1. Строка <to> короче <from> (лишние символы удаляются)
SELECT TRANSLATE('abcde', 'ace', 'xy');
+---------------------------------+
| TRANSLATE('abcde', 'ace', 'xy') |
+---------------------------------+
| xbyd |
+---------------------------------+
  1. Обработка NULL: если хотя бы один аргумент равен NULL, возвращается NULL
SELECT TRANSLATE(NULL, 'a', 'z'), TRANSLATE('abc', NULL, 'z'), TRANSLATE('abc', 'a', NULL);
+---------------------------+-----------------------------+-----------------------------+
| TRANSLATE(NULL, 'a', 'z') | TRANSLATE('abc', NULL, 'z') | TRANSLATE('abc', 'a', NULL) |
+---------------------------+-----------------------------+-----------------------------+
| NULL | NULL | NULL |
+---------------------------+-----------------------------+-----------------------------+
  1. Граничные случаи с пустыми строками: при пустой исходной строке возвращается пустая строка, при пустой строке <from> исходная строка остаётся без изменений, а при пустой строке <to> совпадающие символы удаляются
SELECT TRANSLATE('', 'a', 'z'), TRANSLATE('abc', '', 'z'), TRANSLATE('abc', 'a', '');
+-------------------------+---------------------------+---------------------------+
| TRANSLATE('', 'a', 'z') | TRANSLATE('abc', '', 'z') | TRANSLATE('abc', 'a', '') |
+-------------------------+---------------------------+---------------------------+
| | abc | bc |
+-------------------------+---------------------------+---------------------------+
  1. Многобайтовые символы UTF-8
SELECT TRANSLATE('ṭṛì ḍḍumai', 'ṭṛ', 'ab');
+--------------------------------------------------+
| TRANSLATE('ṭṛì ḍḍumai', 'ṭṛ', 'ab') |
+--------------------------------------------------+
| abì ḍḍumai |
+--------------------------------------------------+
  1. Замена цифровых символов
SELECT TRANSLATE('a1b2c3', '123', 'xyz');
+-----------------------------------+
| TRANSLATE('a1b2c3', '123', 'xyz') |
+-----------------------------------+
| axbycz |
+-----------------------------------+
  1. Повторное сопоставление при наличии повторяющихся символов с обеих сторон
SELECT TRANSLATE('aabbccaa', 'abab', 'xyuv');
+---------------------------------------+
| TRANSLATE('aabbccaa', 'abab', 'xyuv') |
+---------------------------------------+
| xxyyccxx |
+---------------------------------------+
  1. Замена специальных символов
SELECT TRANSLATE('hello@world.com', '@.', '-_');
+------------------------------------------+
| TRANSLATE('hello@world.com', '@.', '-_') |
+------------------------------------------+
| hello-world_com |
+------------------------------------------+

Ключевые слова​

TRANSLATE