NLSSORT

说明

将字符串转换为指定排序方式对应的二进制编码。

语法

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;