TRANSLATE 标量函数 (scalar function)

TRANSLATE函数返回的值中,第一个参数的一个或多个字符可能被转换为其他字符。

阅读语法图跳过可视化语法图TRANSLATE( 字符串表达式,成串,从字符串,' ',填充)

该模式是 SYSIBM。

字符串表达式
指定要转换的字符串的表达式。 字符串表达式必须返回一个值,该值是内置字符或图形字符串数据类型,且不是LOB。 如果字符串表达式是EBCDIC或ASCII图形字符串,并且字符串表达式是唯一指定的参数,则由CURRENT LOCALE LC_CTYPE特殊寄存器指定的区域设置名称必须是非空字符串。

该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。

成串
一个表达式,用于指定字符串表达式中的某些字符要转换为哪些字符。 该字符串有时被称为输出转换表to-string 必须返回一个非LOB的内置字符或图形字符串数据类型。

该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。

如果 to-string 的长度小于 from-string 的长度,则用垫片或空白将to-string 补足到 from-string的长度。 如果 to-string 的长度大于 from-stringto-string中的多余字符将被忽略,且不会发出警告。

从字符串
一个表达式,用于指定字符串表达式中需要转换的字符。 该字符串有时被称为输入转换表。 当找到字符串中的字符时, 字符串表达式中的字符将转换为字符串中的字符,该字符位于字符串表达式中字符的对应位置。

from-string 必须返回一个值,该值是内置字符或图形字符串数据类型,且不是LOB。

该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。

如果字符串中包含重复字符,则使用第一个出现的字符,且不会发出警告。 from-string 的默认值是一个以字符 X'00' 开头、以字符X'FF' (十进制255)结尾的字符串。

pad
一个表达式,用于指定字符,如果字符串长度小于字符串 ,则用该字符填充字符串pad 是一个必须返回一个值的表达式,该值是内置字符或图形字符串数据类型,不是 LOB,长度为 1。 字符串的长度为1时,表示一个字节,图形字符串的长度为1时,表示两个字节。 默认值为空,适用于字符串表达式

如果仅指定了字符串表达式 ,则字符串将根据当前区域设置 LC_CTYPE 特殊寄存器指定的区域设置名称转换为大写,如下所示:

空白
SBCS小写字母a-z转换为SBCS大写字母A-Z,带变音符号的字符不转换。 如果字符串包含混合字符或双字节字符,则全角小写字符 a-z 会转换为全角拉丁文大写字符 A-Z。 为了获得最佳性能,请指定一个空字符串,除非您的数据必须使用特定区域设置的规则进行处理。
UnI
转换使用 “选择转换”中所述的“正常”和“特殊”外壳功能。 当字符串表达式为EBCDIC数据时,请勿指定UNI。
更改开始UNI_90更改结束
更改开始转换使用Unicode标准 9.0.0 和NORMAL大小写功能,如 “选择转换”中所述。 当字符串表达式为EBCDIC数据时,请勿指定 UNI_60。更改结束
更改开始UNI_90更改结束
更改开始转换使用Unicode标准 6.0.0 和NORMAL大小写功能,如 “选择转换”中所述。 当字符串表达式为EBCDIC数据时,请勿指定 UNI_90。更改结束
UNI_SIMPLE
案例转换使用 “选择转换”中所述的NORMAL格式。 UNI_SIMPLE不能用于EBCDIC数据。
语言环境名称
区域设置定义了转换为大写字符的规则。

对于Unicode数据,如果处理某些字符,使用TRANSLATE函数(带一个参数的TRANSLATE函数等同于UPPER函数)可能会导致扩展。 您应该确保结果字符串足够大,能够容纳表达式的结果。

更改开始如果指定了多个参数,则结果字符串将逐个从字符串表达式中构建。 如果字符串表达式为CHAR或VARCHAR,则一个字符串的长度为一个字节。 如果字符串表达式为图形或变图形,则一个字符串的长度为两个字节。 更改结束

更改开始对于字符串表达式中的每个部分,都会在from-string中搜索相同的部分。 更改结束

更改开始
  • 如果字符串表达式中的片段与字符串中的片段匹配,并且字符串中的片段与字符串中的片段匹配,则字符串中的片段将移动到结果字符串中。 如果字符串表达式中的片段与从字符串中的片段匹配,但到字符串中没有对应的片段,则将垫片移动到结果字符串中。
  • 如果字符串表达式中的片段与从字符串中的任何片段不匹配,则字符串表达式中的片段将移动到结果字符串中。
更改结束

更改开始字符串可以包含混合数据。 如果只指定了一个参数,则对参数执行 UPPER 函数,并遵守 UPPER 函数中混合数据操作规则。 全角拉丁文小写字母a-z转换为全角拉丁文大写字母A-Z。 如果指定了多个参数,则函数将按照前面描述的 CHAR 和 VARCHAR 数据操作。 结果不一定是正确形成的混合数据字符串。更改结束

结果的编码方案与字符串表达式相同。 函数结果的数据类型取决于字符串表达式 、to-string 、from-stringpad 的数据类型:

  • 如果字符串表达式是一个字符串,则为VARCHAR。 结果的CCSID取决于参数:
    • 如果字符串表达式 、to-string 、from-stringpad 是位数据,则结果也是位数据。
    • 如果字符串表达式字符串转换字符串转换填充都是SBCS:
      • 如果字符串表达式转换为字符串 、从字符串填充都是SBCS Unicode数据,则结果的CCSID就是SBCS Unicode数据的CCSID。
      • 如果字符串表达式是SBCS Unicode数据,而 to-string 、from-stringpad 不是SBCS Unicode数据,则结果的CCSID是Unicode数据的混合CCSID。
      • 否则,结果的CCSID与字符串表达式的 CCSID相同。
    • 否则,结果的CCSID是字符串表达式的CCSID 对应的混合CCSID。 但是,如果输入是EBCDIC或ASCII,并且没有相应的混合系统CCSID,则结果的CCSID是字符串表达式的 CCSID。
  • VARGRAPHIC 如果字符串表达式是一个图形。 结果的CCSID与源字符串的CCSID相同。

结果可以为空;如果第一个参数为空,则结果为空值。

示例

示例 1
用大写字母返回字符串“abcdef”。 假设当前区域设置是空白的。
   SELECT TRANSLATE ('abcdef')
     FROM SYSIBM.SYSDUMMY1
结果为“ABCDEF”。
示例 2
假设宿主变量 SITE 的数据类型为 VARCHAR(30),且包含字符串“Hanauma Bay”。
   SELECT TRANSLATE (:SITE)
     FROM SYSIBM.SYSDUMMY1
返回值“HANAUMA BAY”。 结果为全大写,因为只指定了一个参数。
   SELECT TRANSLATE (:SITE, 'j', 'B')
     FROM SYSIBM.SYSDUMMY1
返回值“Hanauma jay”。
   SELECT TRANSLATE (:SITE, 'ei', 'aa')
     FROM SYSIBM.SYSDUMMY1
返回值“Heneume Bey”。
   SELECT TRANSLATE (:SITE, 'bA', 'Bay', '%')
     FROM SYSIBM.SYSDUMMY1
返回值 'HAnAumA bA%'。
   SELECT TRANSLATE (:SITE, 'r', 'Bu')
     FROM SYSIBM.SYSDUMMY1
返回值“Hana ma ray”。
示例 3
假设宿主变量 SITE 的数据类型为VARCHAR(30),且包含“Pivabiska Lake Place”。
   SELECT TRANSLATE (:SITE, '$$', 'Ll')
     FROM SYSIBM.SYSDUMMY1
返回值“Pivabiska $ake P$ace”。
   SELECT TRANSLATE (:SITE, 'pLA', 'Place', '.')
     FROM SYSIBM.SYSDUMMY1
返回值 'pivAbiskA LAk。 pLA..'.