COLLATION_KEY 标量函数
COLLATION_KEY函数返回一个长度可变的二进制字符串,表示指定排序规则中参数的排序规则键。
该模式是 SYSIBM。
可以将一个字符串上的 COLLATION_KEY 结果与另一个字符串上的 COLLATION_KEY 结果进行二进制比较,以确定它们在指定的排序规则名称中的顺序。 为了使比较有意义,COLLATION_KEY的结果必须来自相同的排序规则名称。
- 字符串表达式
- 返回字符串或图形字符串的表达式,该字符串或图形字符串不是LOB,其排序规则键待定。 如果字符串表达式是一个字符串,则它不能是位数据。 如果字符串表达式不是Unicode UTF-16 (CCSID 1200),则在获得相应的排序规则键之前将其转换为Unicode UTF-16。 字符串表达式长度不得超过 UTF-16 表示形式的 32704 字节。
- collation-name
- 非二进制字符串、CLOB或DBCLOB的字符串常量或字符串宿主变量。 collation-name 指定确定排序规则键时要使用的排序规则。 如果整理名不是EBCDIC值,则将其转换为EBCDIC。 整理名长度必须在EBCDIC表示法的1-255字节范围内。 collation-name 的值不区分大小写,且必须为左对齐的有效“短路径”排序规则设置,用于区域 CUN4BOPR 中的参数CUNBOPRM_Collation_Keyword。 有关参数CUNBOPRM_Collation_Keyword中“短路径”设置的详细信息,请参阅 CUNBOPRM区域中参数的描述。
宿主变量的值不能为空。 如果宿主变量有一个关联的指示变量,指示变量的值不能为空。 collation-name 必须在宿主变量中左对齐。 如果长度小于宿主变量的长度,且宿主变量是固定长度的字符或图形数据类型,则右侧必须填充空格。
整理后的名称采用 CUN4BOPR_Collation_Keyword 规范。 您必须指定一个 z/OS® CUNBOPR_Collation_Keyword参数可接受的值。
下表列出了一些支持的值:表 1. 校对 关键词 参考资料 属性名称 密钥 可能的值 语言环境 L.R.V <locale> 强度 S 1、2、3、4、I、D 案例级别 K X、O、D 案例_第一 C X、L、U、D 替代 A N、S、D 可变_顶部 T <十六进制数字> 规范化 N X、O、D 法语 F X、O、D 小乘佛教 H X、O、D 下表列出了排序关键词的缩写:- 缩写
- 定义
- D
- 缺省值
- O
- on
- X
- off
- 1
- 主要
- 2
- 次
- 3
- 三级
- 4
- 第四纪
- I
- 相同
- S
- 转移
- N
- 不容忽视
- L
- 降序
- U
- 上首
UCA 版本 4.0.1;忽略空格、标点符号和特殊字符;使用瑞典语语言约定;使用大小写优先;区分大小写。'UCA400R1_AS_LSV_S3_CU'
UCA 版本 4.0.1;不要忽略空格、标点符号和特殊字符;使用瑞典语语言约定;使用大小写优先的“小写”(或者不设置,因为大多数语言环境默认使用“小写”);启用规范化;区分大小写。'UCA400R1_AN_LSV_S3_CL_NO' - 整数
- 指定结果长度属性的整数值。 如果指定,则该值必须是介于1-32704之间的整数常数。如果未指定长度,则结果的长度属性按以下方式确定:
字符串表达式 结果长度属性 CHAR(n) 或 VARCHAR(n) MIN (VARB INARY(12n ), 32704) GRAPHIC(n) 或 VARGRAPHIC(n) MIN (VARB INARY(12n ), 32704) 无论是否指定长度,排序键的长度必须小于或等于结果的属性长度。 排序键的实际结果长度约为字符串表达式长度的六倍,其中字符串表达式长度以Unicode字节表示。 对于某些排序规则名称 ,例如 UCA410_LKO_RKR (用于韩语排序规则),结果的默认长度属性 12n 可能不够大,系统会返回错误。 为了避免这种错误,必须将结果的长度属性明确指定为一个更大的常数。 有关结果的正确长度属性,请参阅 CUNBOPRM 区域中的参数描述 ,了解有关 Collation Services 目标缓冲区长度注意事项的信息。
结果可以为空;如果第一个参数为空,则结果为空值。
COLLATION_KEY函数使用 z/OS 中的Unicode排序规则服务来返回排序规则键。 请参阅 “排序支持的区域设置 ”以获取支持的排序版本列表。
如果在运行COLLATION_KEY函数时无法使用Unicode排序服务,则将返回错误。
示例1: 以下查询使用默认的Unicode排序算法 V4.0.1(UCA ,按照员工的姓氏排序,忽略空格、标点符号和特殊字符,使用瑞典语语言约定,不区分大小写:
SELECT FIRSTNAME, LASTNAME
FROM DSN8C10.EMP
ORDER BY COLLATION_KEY(LASTNAME, 'UCA400R1_AS_LSV_S2');示例2: 以下查询在LASTNAME列和SALES_PERSON列上使用COLLATION_KEY函数,从相同的排序规则名称中获取排序键,以便进行符合文化习惯的比较。 它找到了魁北克省的雇员部门:
SELECT E.WORKDEPT
FROM EMPLOYEE AS E INNER JOIN SALES AS S
ON COLLATION_KEY(E.LASTNAME, 'UCA400R1_LFR_RCA') =
COLLATION_KEY(S.SALES_PERSON, 'UCA400R1_LFR_RCA')
WHERE S.REGION = 'Quebec';示例3: 为表EMPLOYEE创建索引EMPLOYEE_NAME_SORT_KEY,该索引基于内置函数COLLATION_KEY,其排序规则名称为“ UCA410_LDE ”,专为德语定制。
CREATE INDEX EMPLOYEE_NAME_SORT_KEY
ON EMPLOYEE (COLLATION_KEY(LASTNAME, 'UCA410_LDE', 600),
COLLATION_KEY(FIRSTNAME, 'UCA410_LDE', 600),
ID);