CREATE TABLE NAMES
(
NAME VARCHAR(50),
NAME_FR_KEY VARCHAR(600)GENERATED ALWAYS AS (CAST(ICU.SORTKEY(NAME, 'LFR')
AS VARCHAR(600))),
NAME_DE_KEY VARCHAR(600)GENERATED ALWAYS AS (CAST(ICU.SORTKEY(NAME, 'LDE')
AS VARCHAR(600)))
)
SELECT NAME FROM NAMES
ORDER BY CAST(ICU.SORTKEY(NAME, 'LFR') AS VARCHAR(600))
总是需要指定转换,这使这种办法不够理想。可以使用下面的源函数将转换隐藏起来: 清单 5. 使用源函数将转换隐藏起来CREATE FUNCTION MY_SORTKEY(VARCHAR(50), VARCHAR(50))
RETURNS VARCHAR(600) FOR BIT DATASOURCE ICU.SORTKEYCREATE TABLE NAMES
(
NAME VARCHAR(50),
NAME_FR_KEY VARCHAR(600) GENERATED ALWAYS AS (MY_SORTKEY(NAME, 'LFR')),
NAME_DE_KEY VARCHAR(600) GENERATED ALWAYS AS (MY_SORTKEY(NAME, 'LDE'))
)
SELECT NAME FROM NAMES
ORDER BY MY_SORTKEY(NAME, 'LFR')
不管使用哪种方法,重要的考虑因素都是生成的列的长度。SORTKEY 结果的长度可能比原来的字符串长。简单的规则是,对于输入字符串中的每个字符,在输出字符串中答应有 12 字节。(对于某些不常见的排序规则和输入值组合,这个空间甚至也可能不够。)但是,许多排序规则会产生比这短得多的排序键,因此在决定生成的列的大小时,对要使用的排序规则和数据进行一些实验是有帮助的。
标签: 函数