mysql nlssort_Oracle中文排序 NLSSORT

今天发现了个挺有意思的函数: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

你可能感兴趣的:(mysql,nlssort)