电脑技术学习

DB2用户定义函数实现多种语言的排序

dn001
  必须从 Unicode 数据库调用 SORTKEY,否则返回一个错误。(SQLSTATE SKUTF)。
  示例  example.db2 中的 Unicode 字符  example.db2 文件包含几个用 UTF-8 进行编码的字符。理想情况下,应该从一个 Unicode shell 调用下面的示例。假如不是从 Unicode shell 调用示例,那么表 SORTKEY_GERMAN1 和 SORTKEY_GERMAN2 会包含不正确的数据,示例 4 会失败。  为了答应从非 Unicode shell 调用示例,可以将注册表变量 DB2CODEPAGE 设置为 1208。这会使 DB2 客户机以 UTF-8 格式处理数据。加重音的字符无法正确显示,但是示例可以正确地运行。  为了设置 DB2CODEPAGE 并运行示例,执行以下命令:db2 terminate
  db2set DB2CODEPAGE=1208
  db2 connect to sample
  db2 -tf example.db2
  当 DB2CODEPAGE 设置为 1208 时,它对其他应用程序可能会产生某些意料之外的效果。在运行示例之后,可以用以下命令恢复 DB2CODEPAGE:db2 terminate
  db2set DB2CODEPAGE=
  这些示例使用的表、数据和查询可以在文件 example.db2 中找到。当连接数据库时,可以用以下命令执行它:  db2 -tf example.db2  ORDER BY  不同的语言用不同的规则来决定字母的次序。例如,英语从字母 A 排序到 Z,没有例外,如第一个示例所示。  查询 1. 用英语排序规则进行排序SELECT NAME FROM SORTKEY_NAMES
  ORDER BY ICU.SORTKEY(NAME, 'LEN')
  结果 1. 用英语排序规则进行排序  码NAME
  --------------------
  Alice
  Celine
  Charles
  Cindy
  Don
  Hillary
  Ian
  Sam
上一页123456789下一页   但是在斯洛伐克语中,两个字符的组合 CH 排在字母 H 和 I 之间。  查询 2. 用斯洛伐克语排序规则进行排序SELECT NAME FROM SORTKEY_NAMES
  ORDER BY ICU.SORTKEY(NAME, 'LSK')
  结果 2. 用斯洛伐克语排序规则进行排序NAME
  --------------------
  Alice
  Celine
  Cindy
  Don
  Hillary
  Charles
  Ian
  Sam
  注重,Charles 现在位于 Hillary 和 Ian 之间。  比较  一些语言对于同一个字符有不同的表示方法。例如,在德语中,字母 ä 等于 ae,ö 等于 oe,ü 等于 ue。在 SQL 中进行比较时,并不考虑这些替代表示方法。  假设有两个德国城市名列表: NuernbergNürnberg  LuebeckLuebeck  KölnKoeln  当使用普通的 SQL 联结这两个列表时,不考虑替代的字符表示方法。  查询 3. 未规范化的联结SELECT G1.CITY AS CITY1, G2.CITY AS CITY2
  FROM SORTKEY_GERMAN1 AS G1, SORTKEY_GERMAN2 AS G2
  WHERE G1.CITY = G2.CITY
  ORDER BY G1.CITY
  结果 3. 未规范化的联结CITY1CITY2
  -------------------- --------------------
  LuebeckLuebeck
  注重,在这两个表中只有拼写完全相同的城市名才被认为是相等的。  但是,SORTKEY UDF 可以处理字符的不同表示方法。在这种情况下,我们使用德语排序规则的 “phonebook 变体并将强度设置为 1,从而忽略重音差异。(排序规则选项的完整列表见 “排序规则名。)