UPPER 标量函数 (scalar function)
UPPER函数返回一个字符串,其中所有字符都转换为大写。
该模式是 SYSIBM。
- 字符串表达式
- 指定要转换的字符串的表达式。 字符串表达式必须返回一个内置字符或图形字符串。 字符串参数不能是CLOB,图形字符串参数不能是DBCLOB。 如果字符串表达式是EBCDIC图形字符串,则不能为区域设置名称字符串指定空字符串。 如果字符串表达式是位数据,则不能指定区域设置名称字符串。
- 本地化名称字符串
- 一个字符串常量或字符串宿主变量,指定一个有效的区域设置名称,但CLOB或DBCLOB除外。 如果区域设置名称字符串不是EBCDIC格式,则将其转换为EBCDIC格式。 区域设置名称字符串的长度必须在EBCDIC表示法的1-255字节范围内。 区域设置名称字符串不区分大小写,且必须为有效的区域设置。 有关区域设置及其命名约定的信息,请参阅区域设置命名约定。 一些地区包括:
- Fr_BE
- Fr_FR@EURO
- En_US
- Ja_JP
转换过程取决于为区域设置指定的值,如下所示:
- 空白
- SBCS小写字母a-z转换为SBCS大写字母A-Z,带变音符号的字符不转换。 如果字符串包含混合字符或双字节字符,则全角小写字符 a-z 会转换为全角拉丁文大写字符 A-Z。 为了获得最佳性能,请指定一个空字符串,除非您的数据必须使用特定区域设置的规则进行处理。
- UnI
- 转换使用 “选择转换”中所述的“正常”和“特殊”外壳功能。 当字符串表达式为EBCDIC数据时,请勿指定UNI。
UNI_60
转换使用Unicode标准 6.0.0 和NORMAL大小写功能,如 “选择转换”中所述。 当字符串表达式为EBCDIC数据时,请勿指定 UNI_60。
UNI_90
转换使用Unicode标准 9.0.0 和NORMAL大小写功能,如 “选择转换”中所述。 当字符串表达式为EBCDIC数据时,请勿指定 UNI_90。
- UNI_SIMPLE
- 案例转换使用 “选择转换”中所述的NORMAL格式。 UNI_SIMPLE不能用于EBCDIC数据。
- 语言环境名称
- 区域设置定义了转换为大写字符的规则。
宿主变量的值不能为空。 如果宿主变量有一个关联的指示变量,指示变量的值不能为空。 区域设置名称必须为:
- 在宿主变量中左对齐
- 如果长度小于宿主变量的长度,则在右侧填充空格,宿主变量为固定长度的 CHAR 或 GRAPHIC 数据类型
如果未指定区域设置名称字符串 ,则区域设置由特殊寄存器CURRENT LOCALE LC_CTYPE确定。 有关特殊注册的信息,请参阅当前区域 LC_CTYPE 特殊注册。
如果基于表达式的索引引用了UPPER函数,则必须指定区域设置名称字符串
- 整数
- 指定结果长度属性的整数值。 如果指定,则整数必须是字符串表达式编码方案表示法中1-32704字节范围内的整数常量。
如果未指定整数 ,则结果的长度属性与字符串表达式的长度相同。
对于Unicode数据,如果处理某些字符,使用UPPER函数可能会导致扩展。 例如,
UPPER(UX'FB03')将会生成 UX'004600460049'。 您应该确保结果字符串足够大,能够容纳表达式的结果。
结果可以为空值;如果参数为空值,那么结果为空值。
注意
- 语法替代方案:
- UCASE是UPPER的同义词。 为了符合SQL标准,应该使用UPPER。
示例
- 示例 1:
- 用大写字母返回字符串“abcdef”。 假设当前区域设置是空白的。
结果为“ABCDEF”。SELECT UPPER('abcdef') FROM SYSIBM.SYSDUMMY1 - 示例 2:
- 将字符串“ffi”以大写字母形式返回(“FFI”)。 假设当前区域设置为“UNI”。
由于某些Unicode字符在处理时会发生扩展,因此会产生错误。 为了避免错误,您需要使用以下语句:SELECT UPPER(UX'FB03') FROM SYSIBM.SYSDUMMYU;
前面语句的结果是值“FFI”。SELECT UPPER(CAST(UX'FB03' AS VARCHAR(3)) FROM SYSIBM.SYSDUMMYU; - 示例 3:
- 根据内置函数UPPER和区域设置名称' Fr_FR@EURO '为表EMPLOYEE创建索引EMPLOYEE_NAME_UPPER。
结果为“ABCDEF”。CREATE INDEX EMPLOYEE_NAME_UPPER ON EMPLOYEE (UPPER(LASTNAME, 'Fr_FR@EURO', 60), UPPER(FIRSTNAME, 'Fr_FR@EURO', 60), ID);
