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

Функция

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

Спецификация
 
<синтаксис>::=
Общие правила
  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. Все аргументы функции могут быть заданы , который должен содержать спецификацию типа данных параметра.

    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