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