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

Функция

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

Спецификация
 
< синтаксис >::=
Общие правила
  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