Поделиться через


TRANSLATE (Transact-SQL)

Область применения: SQL Server 2017 (14.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure

Возвращает строку, указанную в качестве первого аргумента, после преобразования символов, указанных во втором аргументе, в конечный набор символов, указанный в третьем аргументе.

Синтаксис

TRANSLATE ( inputString, characters, translations )

Аргументы

inputString

Строковое выражение для поиска. inputString может быть любого символьного типа данных (nvarchar, varchar, nchar, char).

characters

Строковое выражение, содержащее символы, которые следует заменить. characters может быть любого символьного типа данных.

translations

Строковое выражение, содержащее заменяющие символы. translations должен иметь один и тот же тип данных и длину, что и characters.

Типы возвращаемых данных

Возвращает символьное выражение того же типа даты, что и inputString, в котором символы из второго аргумента заменены соответствующими символами из третьего аргумента.

Замечания

TRANSLATE возвращает ошибку, если выражения characters и translations имеют разную длину. TRANSLATE возвращает значение NULL, если любой из аргументов имеет значение NULL.

Поведение функции TRANSLATE аналогично использованию нескольких функций REPLACE. TRANSLATE, однако, не заменяет отдельные символы в inputString более одного раза. Одно значение в параметре characters может заменять несколько символов в inputString.

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

TRANSLATE всегда учитывает параметры сортировки SC. Подробные сведения о дополнительных параметрах сортировки см. в разделе Поддержка параметров сортировки и Юникода.

Примеры

А. Замена квадратных и фигурных скобок обычными

Следующий запрос заменяет квадратные и фигурные скобки во входной строке на круглые:

SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()');

Вот результирующий набор.

2*(3+4)/(7-2)

Эквивалентные вызовы функции REPLACE

В следующей инструкции SELECT есть группа из четырех вложенных вызовов функции REPLACE. Эта группа эквивалентна одному вызову функции TRANSLATE в предыдущей инструкции SELECT:

SELECT
REPLACE
(
      REPLACE
      (
            REPLACE
            (
                  REPLACE
                  (
                        '2*[3+4]/{7-2}',
                        '[',
                        '('
                  ),
                  ']',
                  ')'
            ),
            '{',
            '('
      ),
      '}',
      ')'
);

B. Преобразование точек GeoJSON в WKT

GeoJSON — это формат для кодирования различных структур географических данных. С помощью функции TRANSLATE разработчики могут легко преобразовывать точки GeoJSON в формат WKT, и наоборот. Следующий запрос заменяет квадратные и фигурные скобки во входной строке на обычные:

SELECT TRANSLATE('[137.4,72.3]' , '[,]', '( )') AS Point,
    TRANSLATE('(137.4 72.3)' , '( )', '[,]') AS Coordinates;

Вот результирующий набор.

Point Координаты
(137.4 72.3) [137.4,72.3]

В. Используйте функцию TRANSLATE

SELECT TRANSLATE('abcdef','abc','bcd') AS Translated,
       REPLACE(REPLACE(REPLACE('abcdef','a','b'),'b','c'),'c','d') AS Replaced;

Вот результирующий набор.

Переведенный текст Replaced
bcddef ddddef

См. также