#NLSSORT
NLSSORT函数根据指定的排序规则对expr的值进行排序,生成一个VARCHAR类型的排序键。本函数只能在UTF-8、GB18030字符集下运行。
此函数一般应用于ORDER BY语句中,此时函数生成的是包含每一行排序键的整体排序键,且在某一行的排序键为NULL时,遵循ASC时NULLS LAST,和DESC时NULLS FIRST原则。
expr的值须为字符型,或可转换为字符型的其他类型(LOB及XMLTYPE类型支持隐式转换)。当expr的值为NULL时,函数返回NULL。
expr不支持32000字节以上的XMLTYPE、LOB类型数据。
NLS_SORT
指定排序规则,可省略,默认为CHINESE_PINYIN。YashanDB支持如下两种排序规则:
- CHINESE_PINYIN:区分大小写的拼音排序
- CHINESE_PINYIN_CI:不区分大小写的拼音排序
在CHINESE_PINYIN排序规则下的排序键构造规则为:
- 对每个字符(空格除外),按其Unicode值(十六进制)生成一个四位的字符串的排序规则键,如对'a'生成'0061'。
- 对一个不含空格的字符串,其排序键由其所有字符的排序规则键拼接,并在最后加上'000001..01'组成,其中'01'的个数对应字符的个数,如对'aA'生成'0061004100000101'。
- 对一个只包含空格的字符串,无论空格有多少个,都生成'00000020'的排序规则键。
- 对一个部分包含空格的字符串,忽略出现在字符串末尾的空格,对其他空格,则在'000001..01'中,按照空格出现的位置,相应增加'20',如对'a(空格符1)(空格符2)(空格符3)A(空格符4)(空格符5) '生成'0061004100000120202001'。
在CHINESE_PINYIN_CI排序规则下的排序键构造规则为:
- 对每个字符(空格除外),将小写转换为大写后,按其Unicode值(十六进制)生成一个四位的字符串的排序规则键,如对'a'生成'0041'。
- 一个不含空格的字符串,其排序键由其所有字符的排序规则键拼接,如对'aA'生成'00410041'。
- 对一个只包含空格的字符串,无论空格有多少个,都生成'0000'的排序规则键。
- 对一个部分包含空格的字符串,忽略所有空格,如对'a(空格符1)(空格符2)(空格符3)A(空格符4)(空格符5) '生成'00410041'。
示例
--更新employees表中John员工名称为join
UPDATE employees SET employee_name='join' WHERE employee_name='John';
--指定不同排序规则对其按姓名排序
SELECT employee_name n,NLSSORT(employee_name) s1,
NLSSORT(employee_name,'NLS_SORT=CHINESE_PINYIN_CI') s2
FROM employees;
N S1 S2
--------- ---------------------------------- --------------------
Mask 004D00610073006B000001010101 004D00410053004B
join 006A006F0069006E000001010101 004A004F0049004E
Anna 0041006E006E0061000001010101 0041004E004E0041
Jack 004A00610063006B000001010101 004A00410043004B
Jim 004A0069006D0000010101 004A0049004D
SELECT employee_name n
FROM employees
ORDER BY NLSSORT(employee_name);
N
-------------
Anna
Jack
Jim
Mask
join
SELECT employee_name n
FROM employees
ORDER BY NLSSORT(employee_name,'NLS_SORT=CHINESE_PINYIN_CI');
N
-------------
Anna
Jack
Jim
join
Mask