文章
· 五月 20, 2022 阅读大约需 3 分钟

第148章 SQL函数 $TRANSLATE

第148章 SQL函数 $TRANSLATE

执行逐字符替换的字符串函数。

大纲

$TRANSLATE(string,identifier[,associator])

参数

  • string - 目标字符串。它可以是字段名称、文字、主机变量或 SQL 表达式。
  • identifier - 要在字符串中搜索的字符。它可以是字符串或数字文字、主变量或 SQL 表达式。
  • associator - 可选 — 与标识符中的每个字符对应的替换字符。它可以是字符串或数字文字、主变量或 SQL 表达式。

描述

$TRANSLATE 函数在返回值字符串中执行逐字符替换。它一次处理一个字符的字符串参数。它将字符串中的每个字符与标识符参数中的每个字符进行比较。如果 $TRANSLATE 找到匹配项,它会记下该字符的位置。

  • $TRANSLATE 的双参数形式从输出字符串中删除标识符参数中的所有字符实例。
  • $TRANSLATE 的三参数形式将在字符串中找到的每个标识符字符的所有实例都替换为位置对应的关联字符。替换是基于字符而不是字符串执行的。如果标识符参数包含的字符多于关联参数,则从输出字符串中删除标识符参数中多余的字符。如果标识符参数包含的字符少于关联参数,则忽略关联参数中多余的字符。

$TRANSLATE 区分大小写。

$TRANSLATE 不能用于将 NULL 替换为字符。

如果指定的参数太少,则会发出 SQLCODE -380。如果指定的参数过多,则会发出 SQLCODE -381

$TRANSLATE and REPLACE

$TRANSLATE 执行逐字符匹配和替换。 REPLACE 执行字符串对字符串的匹配和替换。 REPLACE 可以用另一个子字符串替换一个或多个字符的单个指定子字符串,或删除指定子字符串的多个实例。 $TRANSLATE 可以用相应的指定替换字符替换多个指定字符。

默认情况下,这两个函数都区分大小写,从字符串的开头开始,并替换所有匹配的实例。 REPLACE 具有可用于更改这些默认值的参数。

示例

在以下示例中,两个参数 $TRANSLATE 通过删除标点符号(逗号、空格、句点、撇号、连字符)来修改名称值,返回仅包含字母字符的名称。请注意,标识符将撇号加倍以将其转义为文字字符,而不是字符串分隔符:

SELECT TOP 20 Name,$TRANSLATE(Name,', .''-') AS AlphaName 
FROM Sample.Person
WHERE Name %STARTSWITH 'O'

在以下示例中,三参数 $TRANSLATE 通过将逗号和空格替换为插入符号 (^) 字符来修改名称值,返回以三部分分隔的名称(姓氏、名字、中间名首字母)。请注意,关联者必须指定“^”的次数与标识符中的字符数一样多:

SELECT TOP 20 Name,$TRANSLATE(Name,', ','^^') AS PiecesNamePunc
FROM Sample.Person
WHERE Name %STARTSWITH 'O'

在以下示例中,三参数 $TRANSLATE 通过将逗号和空格替换为脱字符 (^) 字符(在标识符和关联符中指定)和删除句点、撇号和连字符(在标识符中指定,从关联人):

SELECT TOP 20 Name,$TRANSLATE(Name,', .''-','^^') AS PiecesNameNoPunc 
FROM Sample.Person
WHERE Name %STARTSWITH 'O'
讨论 (1)2
登录或注册以继续