前幾天時間曾經看見有人提出的中文排序問題,當時有高手用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...