Замена символов строки (TRANSLATE)

Функция

Замена указанных символов строки другими символами.

Спецификация
 
<​синтаксис​>::=
Общие правила
  1. <​Строка​>, <​подстрока1​>, <​подстрока2​> должны иметь типы данных: CHAR, VARCHAR, NCHAR, NCHAR VARYING.

  2. Типы данных <​строки​>, <​подстроки1​> и <​подстроки2​> должны быть приводимыми.

  3. Длина <​подстроки1​>, <​подстроки2​> не должна быть более 4000.

  4. Окончательная длина <​строки​> не должна быть более 4000.

  5. <​Подстрока1​> задает набор заменяемых в <​строке​> символов.

  6. <​Подстрока2​> задает новые значения заменяемых символов.

    Примечание

    Символы пробела, заданные в конце символьных выражений <​строка​>, <​подстрока1​>, <​подстрока2​> усекаются. Чтобы они принимались во внимание, необходимо использовать явное преобразование типа данных или не задавать пробелы в конце этих выражений.

    Например, при выполнении данного запроса символ пробела не учитывается:

    select translate('111-111 22','- ','');
    | 111111 22 |

    а в этих запросах – учитывается:

    select translate('111-111 22',' -','');
    | 11111122 |
    select translate('111-111 22',cast '- ' as varchar,'');
    | 11111122 |
  7. Все аргументы функции могут быть заданы <​SQL-параметром​>, который должен содержать спецификацию типа данных параметра.

    select translate(? (char(20)), ? (char(2)), ? (char(2)));
    11 22 311 55
    12
    ab
    |aa bb 3aa 55        |

Возвращаемое значение
  1. Исходная <​строка​>, в которой каждый символ из <​подстроки1​> заменен на соответствующий ему символ из <​подстроки2​>. Например, если <​подстрока1​>='ac', а <​подстрока2​>='12', то каждый символ 'a' в исходной <​строке​> будет заменён на '1', а каждый символ 'c' в исходной <​строке​> – на '2'.

  2. Если <​подстрока1​> длиннее <​подстроки 2​>, то все ее лишние символы удаляются из исходной <​строки​>, поскольку для них нет соответствующих символов в <​подстроке2​>.

  3. Результирующая строка возвращается без концевых пробелов.

  4. Если один из аргументов имеет значение NULL, результат будет NULL.

  5. Если аргумент <​строка​> имеет нулевую длину, возвращается пустая строка.

    select translate('','1','2');
  6. Функция TRANSLATE теперь утраивает длину входного аргумента для записи ответа только для MBCS кодировок.

Примеры
  1. Замена всех прописных букв строчными.

    select translate(make,make, lower(make)) from auto;
    ford
    alpine
    …
  2. Исправление текста на кириллице, ошибочно набранного в латинице.

    select translate('ошибка ddjlf',
    'qwertyuiop[]asdfghjkl;"zxcvbnm,.',
    'йцукенгшщзхъфывапролджэячсмитьбю');
    |ошибка ввода   |
  3. Удаление всех гласных из текста.

    select translate(make, 'EYUIOAJ','') from auto;
    FRD
    LPN
    MRCN MTRS
    MSRT
    …
  4. Функция translate является расширением функции replace.

    Запрос

    select translate('abcdaefbgh', 'ab','12');
    12cd1ef2gh
    аналогичен запросу
    select replace (replace('abcdaefbgh', 'a','1'), 'b','2');
    12cd1ef2gh