NLSSORT¶
说明¶
将字符串转换为指定排序方式对应的二进制编码。
参数¶
character_expression
VARCHAR、CHAR、TEXT等类型的字符串,可以是常量、变量或者表中的列。
'nlsparam'
指定排序方式。若不指定'nlsparam',则 NLSSORT 函数会使用后台参数NLS_SORT的当前值作为排序方式。
格式:'NLS_SORT = sort'
sort可取值:
- BINARY: 按照二进制排序,排序结果与数据库编码格式相关。
- BINARY_CI: 按照二进制排序,排序结果区分重音,不区分大小写。(区分重音功能暂未实现)
- BINARY_AI: 按照二进制排序,排序结果不区分重音和大小写。
- SCHINESE_PINYIN_M: 按照拼音排序(简体中文)。
- SCHINESE_RADICAL_M: 按照部首排序(简体中文)。
- SCHINESE_STROKE_M: 按照笔画排序(简体中文)。
返回值¶
VARBINARY 类型,表示字符串按照指定方式排序对应的二进制编码。
注意:
当后台参数NLS_SORT不是BINARY时,字符类型排序键会隐式调用NLSSORT函数,按照NLS_SORT指定的排序方式进行排序。具体表现参见示例。
示例¶
示例1: 使用 NLSSORT 排序(以 GBK 编码数据库为例)
-- 清理环境
DROP TABLE tab1 CASCADE;
-- 创建表并插入数据
CREATE TABLE tab1(id INT, a TEXT);
INSERT INTO tab1 VALUES(1, '啊');
INSERT INTO tab1 VALUES(2, '八');
INSERT INTO tab1 VALUES(3, '喊');
INSERT INTO tab1 VALUES(4, '一');
-----------------------------------------------------------
-- NLS_SORT 使用默认值 BINARY
SET NLS_SORT = 'BINARY';
-- 字符类型排序键,按照 BINARY排序
-- 排序结果与数据库编码格式相关(当前为GBK)
SELECT * FROM tab1 ORDER BY a;
ID(int) |A(text) |
--------------------------
1 |啊 |
--------------------------
2 |八 |
--------------------------
3 |喊 |
--------------------------
4 |一 |
总数目:4
-----------------------------------------------------------
-----------------------------------------------------------
-- 修改 NLS_SORT 按照拼音排序排序(简体中文)
SET NLS_SORT = 'SCHINESE_PINYIN_M';
-- 字符类型排序键, 按照 NLS_SORT 的当前值 —— 拼音排序
-- 排序结果与数据库编码格式无关
SELECT * FROM tab1 ORDER BY a;
ID(int) |A(text) |
--------------------------
1 |啊 |
--------------------------
2 |八 |
--------------------------
3 |喊 |
--------------------------
4 |一 |
总数目:4
-----------------------------------------------------------
-----------------------------------------------------------
-- NLS_SORT 使用默认值 BINARY
SET NLS_SORT = 'BINARY';
-- 显式调用 NLSSORT函数(给出一个参数)
-- 按照 NLS_SORT 的当前值 —— BINARY排序
-- 排序结果与数据库编码格式相关(当前为GBK)
SELECT * FROM tab1 ORDER BY NLSSORT(a);
ID(int) |A(text) |
--------------------------
1 |啊 |
--------------------------
2 |八 |
--------------------------
3 |喊 |
--------------------------
4 |一 |
总数目:4
-----------------------------------------------------------
-----------------------------------------------------------
-- 修改 NLS_SORT 按照拼音排序排序(简体中文)
SET NLS_SORT = 'SCHINESE_PINYIN_M';
-- 显式调用 NLSSORT函数(给出一个参数)
-- 按照 NLS_SORT 的当前值 —— 拼音排序
-- 排序结果与数据库编码格式无关
SELECT * FROM tab1 ORDER BY NLSSORT(a);
ID(int) |A(text) |
--------------------------
1 |啊 |
--------------------------
2 |八 |
--------------------------
3 |喊 |
--------------------------
4 |一 |
总数目:4
-----------------------------------------------------------
-----------------------------------------------------------
-- 显式调用 NLSSORT函数(给出两个参数, 按照 BINARY排序)
-- 排序结果与数据库编码格式相关(当前为GBK)
-- 排序结果与 NLS_SORT 当前值无关(当前值为 SCHINESE_PINYIN_M)
SELECT * FROM tab1 ORDER BY NLSSORT(a, 'NLS_SORT=BINARY');
ID(int) |A(text) |
--------------------------
1 |啊 |
--------------------------
2 |八 |
--------------------------
3 |喊 |
--------------------------
4 |一 |
总数目:4
-----------------------------------------------------------
-----------------------------------------------------------
-- 显式调用 NLSSORT函数(给出两个参数, 按照拼音排序)
-- 排序结果与数据库编码格式无关
-- 排序结果与 NLS_SORT 当前值无关(当前值为 SCHINESE_PINYIN_M)
SELECT * FROM tab1 ORDER BY NLSSORT(a, 'NLS_SORT=SCHINESE_PINYIN_M');
ID(int) |A(text) |
--------------------------
1 |啊 |
--------------------------
2 |八 |
--------------------------
3 |喊 |
--------------------------
4 |一 |
总数目:4
-----------------------------------------------------------
-----------------------------------------------------------
-- 显式调用 NLSSORT函数(给出两个参数, 按照部首排序)
-- 排序结果与数据库编码格式无关
-- 排序结果与 NLS_SORT 当前值无关(当前值为 SCHINESE_PINYIN_M)
SELECT * FROM tab1 ORDER BY NLSSORT(a, 'NLS_SORT=SCHINESE_RADICAL_M');
ID(int) |A(text) |
--------------------------
4 |一 |
--------------------------
2 |八 |
--------------------------
1 |啊 |
--------------------------
3 |喊 |
总数目:4
-----------------------------------------------------------
-- 重置参数
RESET NLS_SORT;
-- 删除表
DROP TABLE tab1;
示例2: 多个汉字按照拼音排序
-- 清理环境
DROP TABLE tab2 CASCADE;
-- 多个汉字按照拼音排序
CREATE TABLE tab2(id INT, a TEXT);
INSERT INTO tab2 VALUES(1, '中国北京');
INSERT INTO tab2 VALUES(2, '中国上海');
INSERT INTO tab2 VALUES(3, '美国华盛顿');
INSERT INTO tab2 VALUES(4, '美国夏威夷');
-- 显式调用 NLSSORT 函数(给出两个参数, 按照拼音排序)
-- 排序结果与数据库编码格式无关
SELECT * FROM tab2 ORDER BY NLSSORT(a, 'NLS_SORT=SCHINESE_PINYIN_M');
ID(int) |A(text) |
--------------------------
3 |美国华盛顿 |
--------------------------
4 |美国夏威夷 |
--------------------------
1 |中国北京 |
--------------------------
2 |中国上海 |
总数目:4
-- 删除表
DROP TABLE tab2;