Oracle中文排序 NLSSORT
短信预约 -IT技能 免费直播动态提醒
今天发现了个挺有意思的函数:NLSSORT,发现能给中文按拼音、笔画、部首排序,遂查了下相关资料,结果如下:
Oracle 9i开始,新增了按照拼音、部首、笔画排序功能。
通过设置NSL_SORT值来实现:
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序
实现中文排序有两种常见方式:
session级
ALTER SESSION SET NLS_SORT='XXX';
此结果影响整个session。
sql级
SELECT * FROM TABLE_XXX ORDER BY NLSSORT(字段名, 'NLS_SORT=XXX');
例:
CREATE TABLE test_sort(NAME VARCHAR2(50));
INSERT INTO test_sort(NAME) VALUES('中国');
INSERT INTO test_sort(NAME) VALUES('山西');
INSERT INTO test_sort(NAME) VALUES('北京');
INSERT INTO test_sort(NAME) VALUES('陕西');
INSERT INTO test_sort(NAME) VALUES('河北');
INSERT INTO test_sort(NAME) VALUES('湖北');
INSERT INTO test_sort(NAME) VALUES('河南');
默认排序结果: 默认排序以BINARY排序,即二进制排序
SQL> SELECT * FROM test_sort ORDER BY NAME;
NAME
--------------------------------------------------
中国
北京
山西
河北
河南
湖北
陕西
7 rows selected
拼音排序结果:
SQL> SELECT * FROM test_sort ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_PINYIN_M');
NAME
--------------------------------------------------
北京
河北
河南
湖北
山西
陕西
中国
7 rows selected
笔画排序结果:
SQL> SELECT * FROM test_sort ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_STROKE_M');
NAME
--------------------------------------------------
山西
中国
北京
河北
河南
陕西
湖北
7 rows selected
部首排序结果:
SQL> SELECT * FROM test_sort ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_RADICAL_M');
NAME
--------------------------------------------------
中国
北京
山西
河北
河南
湖北
陕西
7 rows selected
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341