UPPER (语言环境敏感) 标量函数

UPPER 函数返回一个字符串,在该字符串中,所有字符都已使用与指定语言环境相关联的规则转换为大写字符。

Read syntax diagramSkip visual syntax diagramUPPER(string-expression ,locale-name ,code-units ,CODEUNITS16CODEUNITS32OCTETS )

该模式是 SYSIBM。

string-expression
返回 CHAR , VARCHAR , GRAPHIC 或 VARGRAPHIC 字符串的表达式。 如果 string-expression 是 CHAR 或 VARCHAR ,那么表达式不得为 FOR BIT DATA (SQLSTATE 42815)。
locale-name
一个字符常量,用于指定用于定义转换为大写字符的规则的语言环境。 locale-name 的值不区分大小写,必须是有效的语言环境 (SQLSTATE 42815)。 有关有效语言环境及其命名的信息,请参阅 SQL 和 XQuery 的语言环境名称
注意: 将 UNI_SIMPLE 作为区域设置名称,即可启用大小写简单折叠映射。
代码单元
整数常量 ,用于指定结果中的代码单元数。 如果指定了此参数,那么 code-units 必须是介于以下之间的整数:
  • 1 和 32 672 (如果结果的字符串单位是 OCTETS)
  • 1 和 16 336 (如果结果的字符串单位是双字节或 CODEUNITS16 )
  • 1 和 8 168 (如果结果的字符串单位为 CODEUNITS32 )
否则为错误 (SQLSTATE 42815)。 如果未显式指定 code-units ,那么它是 string-expression的长度属性。 如果指定了 OCTETS 并且结果是图形数据,那么 code-units 的值必须是偶数,否则将返回错误 (SQLSTATE 428GC)。 如果指定了 OCTETS 并且结果的字符串单元为 CODEUNIT32,那么 code-units 的值必须是 4 的倍数 (SQLSTATE 428GC)。 如果指定了 CODEUNITS16 ,并且结果的字符串单位为 CODEUNITS32,那么 code-units 的值必须是 2 的倍数 (SQLSTATE 428GC)。
CODEUNITS16、CODEUNITS32 或 OCTETS
指定 code-units的字符串单元。

CODEUNITS16 指定 code-units 以 16 位 UTF-16 代码单元表示。 CODEUNITS32 指定 code-units 以 32 位 UTF-32 代码单元表示。 OCTETS 指定 code-units 以字节表示。

如果未显式指定字符串单元,那么 字符串单元 string-expression 将确定所使用的单元。 有关 CODEUNITS16, CODEUNITS32和 OCTETS 的更多信息,请参阅 字符串中的 内置函数中的字符串单元

如果 string-expression 是 CHAR 或 VARCHAR ,那么函数的结果为 VARCHAR ,如果 string-expression 是 GRAPHIC 或 VARGRAPHIC ,那么函数的结果为 VARGRAPHIC。 结果的字符串单位与 string-expression的字符串单位相同

结果的长度属性由 code-units的隐式或显式值,隐式或显式字符串单元,结果数据类型 和结果字符串单元 确定,如下表所示:

表 1. UPPER 作为字符串单元和结果类型的函数的结果的长度属性
结果的数据类型和字符串单元 CODEUNITS16 中 code-units 的长度属性 CODEUNITS32 中 code-units 的长度属性 OCTETS 中 code-units 的长度属性
OCTETS 中的 VARCHAR MIN (code-units * 3 , 32672) MIN (code-units * 4 , 32672) 代码单元
CODEUNITS32 中的 VARCHAR MIN (code-units /2 , 8168) MIN (code-units, 8168) MIN (code-units /4 , 8168)
CODEUNITS16 中的 VARGRAPHIC 或双字节 代码单元 MIN (code-units * 2 , 16336) MIN (code-units /2 , 16336)
CODEUNITS32 中的 VARGRAPHIC MIN (code-units /2 , 8168) MIN (code-units, 8168) MIN (code-units /4 , 8168)

结果的实际长度可能大于 string-expression的长度。 如果结果的实际长度大于结果的长度属性,那么将返回错误 (SQLSTATE 42815)。 如果结果中的代码单元数超过 code-units的值,那么将返回错误 (SQLSTATE 42815)。

如果 string-expression 不在 UTF-16中,那么此函数将执行 string-expression 到 UTF-16的代码页转换,并执行从 UTF-16 到 string-expression的代码页的结果的代码页转换。 如果任一代码页转换导致至少一个替换字符,那么结果包括替换字符,将返回警告 (SQLSTATE 01517) ,并且 SQLCA 中的警告标志 SQLWARN8 设置为 "W"。

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

示例

  • 示例 1: 确保以大写字符返回 EMPLOYEE 表中的列 JOB 值中的字符。
       SELECT UPPER(JOB, 'en_US')
         FROM EMPLOYEE
         WHERE EMPNO = '000020'
    结果是值 "MANAGER"。
  • 示例 2: 查找土耳其语字符串中所有 "I" 字符的大写字符。
       VALUES UPPER('Iİıi', 'tr_TR', CODEUNITS16)
    结果是字符串 "I 伊尔"。
  • 示例 3: 查找德语 "ß" (锐 S) 的大写形式。
       VALUES UPPER('ß', 'de', 2, CODEUNITS16)
    结果是字符串 "SS"。 请注意,必须在此示例中指定 code-units ,因为结果中的代码单元数多于 string-expression中的代码单元数。