TRANSLATE (Transact-SQL)

适用于: SQL Server 2017 (14.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例

在第二个参数中指定的某些字符转换为第三个参数中指定的字符目标集后,返回作为第一个参数提供的字符串。

语法

TRANSLATE ( inputString, characters, translations )

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

inputString

要搜索的字符串表达式。 inputString 可以是任何字符数据类型(nvarchar、varchar、nchar、char)

characters

一个包含应替换字符的字符串表达式。 字符可以是任何字符数据类型

转换

一个包含替换字符的字符串表达式。 转换必须与字符的数据类型和长度相同

返回类型

返回与 inputString(第二个参数中的字符被替换为第三个参数中的匹配字符)具有相同数据类型的字符表达式。

注解

如果字符和转换表达式长度不同,则 TRANSLATE 将返回错误。 如果任何参数为 NULL,TRANSLATE 将返回 NULL。

TRANSLATE 函数行为类似于使用多个 REPLACE 函数。 但是,TRANSLATE 不会多次替换 inputString 中的任何单个字符。 characters 参数中的单个值可以替换 inputString 中的多个字符。

这不同于多个 REPLACE 函数的行为,因为每个函数调用都将替换所有相关字符,即使以前的嵌套 REPLACE 函数调用已替换它们。

TRANSLATE 始终可以感知 SC 排序规则。 有关增补排序规则的详细信息,请参阅排序规则和 Unicode 支持

示例

A. 将方括号和大括号替换为圆括号

以下查询将输入字符串中的方括号和大括号替换为圆括号:

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

下面是结果集。

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

与 REPLACE 等效的调用

在以下 SELECT 语句中,可看到一组对 REPLACE 函数的四个嵌套调用。 此组相当于上述 SELECT 中对 TRANSLATE 函数的一次调用:

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;

下面是结果集。

坐标
(137.4 72.3) [137.4,72.3]

C. 使用 TRANSLATE 函数

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

下面是结果集:

已转换 已替换
bcddef ddddef

另请参阅