ORDER BY 子句中的不完整字符

当在 SELECT 语句的 ORDER BY 子句中指定列子串时,不完整字符也可能会产生问题。

在 ORDER BY 子句中指定列子串的语法如下所示。
元素
描述
column
指定的表或视图中列的名称。
first.last
子串的第一个和最后一个字节的位置。

根据此列中包含的值对查询结果进行排序。

在分层查询中,您可以有选择地指定 ORDER SIBLINGS BY 子句,该子句对数据层次结构的每个级别使用类似的语法,来为 CONNECT BY 子句返回的行排序。

如果语言环境支持字符长度均相同的多字节代码集,那么可以使用 ORDER BY 子句中的列子串。但是,更典型的情况是多字节代码集包含变长字符。在这种情况下,可能会发现在 ORDER BY 子句中指定列子串没有任何意义。

例如:假定您想要使用以下查询来检索 multi_data 表的所有行,并根据定义为 multi_chars 列第四至第六个字符的子串对结果进行排序:
SELECT * FROM multi_data ORDER BY multi_chars[7,12]

如果语言环境支持字符长度均为 2 个字节的多字节代码集,即会知道列中的第四个字符从字节位置 7 开始,列中第六个字符在字节位置 12 结束。上述 SELECT 语句不会生成不完整字符。

但是,如果多字节代码集包含单字节字符、双字节字符和 3 个字节字符的混合,子串 multi_chars[7,12] 可能会创建不完整字符。在这种情况下,在 ORDER BY 子句中指定列子串时可能会获得意外的结果。

有关在 ORDER BY 子句中对不同类型字符数据进行整理的信息,请参阅 ORDER BY 子句。有关 ORDER BY 子句(以及包含 CONNECT BY 子句的分层查询的 ORDER SIBLINGS BY 子句)的完整语法和用法,请参阅 GBase 8s SQL 指南:语法 中的 SELECT 语句。
提示: 当 SQL API 将多字节数据从一个缓冲区复制到另一个缓冲区时,也可能生成不完整字符。有关更多信息,请参阅生成非 ASCII 文件名
1 请参阅 GBase 8s SQL 指南:语法