關於Oracle中文排序

2021-09-01 01:54:31 字數 2143 閱讀 5430

前幾天時間曾經看見有人提出的中文排序問題,當時有高手用decode解決的。不過如果值太多,畢竟這樣寫比較麻煩。

這幾天一直在找關於這方面的例子,其實以前也曾看見過,只是一直未曾用到,也就未加留心,下面把通用的解決方法貼出來,和大家共享之。

宣告:以下所做測試,應該在oracle9i/10g以上。

oracle9i之前,中文是按照二進位制編碼進行排序的。

在oracle9i中新增了按照拼音、部首、筆畫排序功能。可以分別通過設定nls_sort值來實現。

schinese_radical_m

按照部首(第一順序)、筆劃(第二順序)排序。

schinese_stroke_m

按照筆劃(第一順序)、部首(第二順序)排序。

schinese_pinyin_m

按照拼音排序,系統的預設排序方式為拼音排序。

測試如下: 

--建立測試表

create table player

(id number(*,0), 

name varchar2(32)

--插入測試資料

insert into player (id, name)

values (1, '卡卡');

insert into player (id, name)

values (2, '羅納爾迪尼奧');

insert into player (id, name)

values (3, '馬爾遞尼');

insert into player (id, name)

values (4, '因扎吉');

insert into player (id, name)

values (5, '舍甫琴柯');

insert into player (id, name)

values (6, '西多夫');

insert into player (id, name)

values (7, '帕托');

insert into player (id, name)

values (8, '皮爾洛');

insert into player (id, name)

values (9, '內斯塔');

commit;

--按照筆劃排序

sql> select * from player order by

2  nlssort(name,'nls_sort=schinese_stroke_m');

id name

3 馬爾遞尼

9 內斯塔

1 卡卡

8 皮爾洛

4 因扎吉

6 西多夫

7 帕托

2 羅納爾迪尼奧

5 舍甫琴柯

已選擇9行。

--按照部首排序

sql> select * from player order by

2  nlssort(name,'nls_sort=schinese_radical_m');

id name

9 內斯塔

1 卡卡

4 因扎吉

7 帕托

8 皮爾洛

2 羅納爾迪尼奧

5 舍甫琴柯

6 西多夫

3 馬爾遞尼

已選擇9行。

--按照拼音排序,此為系統的預設排序方式

sql> select * from player order by

2  nlssort(name,'nls_sort=schinese_pinyin_m');

id name

1 卡卡

2 羅納爾迪尼奧

3 馬爾遞尼

9 內斯塔

7 帕托

8 皮爾洛

5 舍甫琴柯

6 西多夫

4 因扎吉

已選擇9行。

--預設排序,檢驗

sql> select * from player order by name;

id name

1 卡卡

2 羅納爾迪尼奧

3 馬爾遞尼

9 內斯塔

7 帕托

8 皮爾洛

5 舍甫琴柯

6 西多夫

4 因扎吉

已選擇9行

oracle中文排序

oracle中文排序 oracle9i之前,中文是按照二進位制編碼進行排序的。但oracle9以來,oracle的nlssort排序,可以用來進行語言排序,而不影響當前會話 例如按照拼音 部首 筆畫排序功能只需設定nls sort值 一 schinese radical m 按照部首 第一順序 筆劃...

ORACLE 中文排序

oracle9i之前,中文是按照二進位制編碼進行排序的。但oracle9以來,oracle的nlssort排序還是挻有意思的,它可以用來進行語言排序,不影響當前會話 例如按照拼音 部首 筆畫排序功能只需設定nls sort值 schinese radical m 按照部首 第一順序 筆劃 第二順序 ...

oracle 中文排序

1 alter session set nls sort 排序影響整個會話 oracle9i之前,中文是按照二進位制編碼進行排序的。在oracle9i中新增了按照拼音 部首 筆畫排序功能。設定nls sort值 schinese radical m按照部首 第一順序 筆劃 第二順序 排序 schin...