【NLSSORT】改變Oralce 對簡體漢字的排序規則(拼音、部首、筆畫)
如果資料庫字符集選用的是ZH16GBK,那麼使用order by預設是按照漢字的“二進位制編碼”順序進行排序的。有方法改變這個預設規則麼?
答案是肯定的,Oracle針對簡體中文提供三種排序方法,主要是圍繞“拼音”、“部首”和“筆畫數”展開的。
透過實驗,給大家展示一下NLSSORT在改變簡體漢字排序規則方面的魅力。
1.在Oracle的官方文件中關於排序有如下描述
“Linguistic Sorts”
其中表“Table A-15 Multilingual LInguistic Sorts”中我們關注一下有關中文排序的內容(前三條與簡體中文排序有關,後兩條與繁體中文排序有關):
1)SCHINESE_RADICAL_M
Simplified Chinese sort based on radical as primary order and number of strokes order as secondary order
註釋:簡體中文按照第一順序是“部首”第二順序是“筆畫數”進行排序;
2)SCHINESE_STROKE_M
Simplified Chinese sort uses number of strokes as primary order and radical as secondary order
註釋:簡體中文按照第一順序“筆畫數”是第二順序是“部首”進行排序;
3)SCHINESE_PINYIN_M
Simplified Chinese PinYin sorting order
註釋:簡體中文按照“拼音”進行排序;
4)TCHINESE_RADICAL_M
Traditional Chinese sort based on radical as primary order and number of strokes order as secondary order
註釋:繁體中文按照第一順序是“部首”第二順序是“筆畫數”進行排序;
5)TCHINESE_STROKE_M
Traditional Chinese sort uses number of strokes as primary order and radical as secondary order. It supports supplementary characters.
註釋:繁體中文按照第一順序“筆畫數”是第二順序是“部首”進行排序;
2.建立實驗表T,並初始化六條記錄
sec@secooler> create table t (x varchar2(10));
sec@secooler> insert into t values ('侯');
sec@secooler> insert into t values ('你');
sec@secooler> insert into t values ('做');
sec@secooler> insert into t values ('拉');
sec@secooler> insert into t values ('推');
sec@secooler> insert into t values ('拆');
sec@secooler> commit;
sec@secooler> select * from t;
X
------------------------------
侯
你
做
拉
推
拆
6 rows selected.
3.確認資料庫版本和資料庫字符集
sec@secooler> select * from v$version;
BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
sec@secooler> select userenv('language') from dual;
USERENV('LANGUAGE')
-----------------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
4.在此環境下,檢視預設的漢字排序規則
sec@secooler> select * from t order by x;
X
------------------------------
拆
侯
拉
你
推
做
6 rows selected.
可見,此時的預設漢字排序規則是“拼音”。
5.使用nlssort強制按照拼音排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_PINYIN_M');
X
------------------------------
拆
侯
拉
你
推
做
6 rows selected.
6.使用nlssort強制按照“部首”(第一順序)和“筆畫數”(第二順序)排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_RADICAL_M');
X
------------------------------
你
侯
做
拆
拉
推
6 rows selected.
單人旁的漢字在前,提手旁漢字在後;單人旁的三個漢字進一步又是按照筆畫數多少進行的排序。
7.使用nlssort強制按照“筆畫數”(第一順序)和“部首”(第二順序)排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_STROKE_M');
X
------------------------------
你
拆
拉
侯
做
推
6 rows selected.
可見,越往後的漢字的筆畫數越多。
8.Oracle官方文件中關於NSLSORT函式的描述參考
9.小結
NSLSORT函式在國際化支援上提供了一個非常好的排序解決方案。在具體應用環境下有其重要的意義。善用之。
Good luck.
secooler
10.02.24
-- The End --
答案是肯定的,Oracle針對簡體中文提供三種排序方法,主要是圍繞“拼音”、“部首”和“筆畫數”展開的。
透過實驗,給大家展示一下NLSSORT在改變簡體漢字排序規則方面的魅力。
1.在Oracle的官方文件中關於排序有如下描述
“Linguistic Sorts”
其中表“Table A-15 Multilingual LInguistic Sorts”中我們關注一下有關中文排序的內容(前三條與簡體中文排序有關,後兩條與繁體中文排序有關):
1)SCHINESE_RADICAL_M
Simplified Chinese sort based on radical as primary order and number of strokes order as secondary order
註釋:簡體中文按照第一順序是“部首”第二順序是“筆畫數”進行排序;
2)SCHINESE_STROKE_M
Simplified Chinese sort uses number of strokes as primary order and radical as secondary order
註釋:簡體中文按照第一順序“筆畫數”是第二順序是“部首”進行排序;
3)SCHINESE_PINYIN_M
Simplified Chinese PinYin sorting order
註釋:簡體中文按照“拼音”進行排序;
4)TCHINESE_RADICAL_M
Traditional Chinese sort based on radical as primary order and number of strokes order as secondary order
註釋:繁體中文按照第一順序是“部首”第二順序是“筆畫數”進行排序;
5)TCHINESE_STROKE_M
Traditional Chinese sort uses number of strokes as primary order and radical as secondary order. It supports supplementary characters.
註釋:繁體中文按照第一順序“筆畫數”是第二順序是“部首”進行排序;
2.建立實驗表T,並初始化六條記錄
sec@secooler> create table t (x varchar2(10));
sec@secooler> insert into t values ('侯');
sec@secooler> insert into t values ('你');
sec@secooler> insert into t values ('做');
sec@secooler> insert into t values ('拉');
sec@secooler> insert into t values ('推');
sec@secooler> insert into t values ('拆');
sec@secooler> commit;
sec@secooler> select * from t;
X
------------------------------
侯
你
做
拉
推
拆
6 rows selected.
3.確認資料庫版本和資料庫字符集
sec@secooler> select * from v$version;
BANNER
----------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
sec@secooler> select userenv('language') from dual;
USERENV('LANGUAGE')
-----------------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
4.在此環境下,檢視預設的漢字排序規則
sec@secooler> select * from t order by x;
X
------------------------------
拆
侯
拉
你
推
做
6 rows selected.
可見,此時的預設漢字排序規則是“拼音”。
5.使用nlssort強制按照拼音排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_PINYIN_M');
X
------------------------------
拆
侯
拉
你
推
做
6 rows selected.
6.使用nlssort強制按照“部首”(第一順序)和“筆畫數”(第二順序)排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_RADICAL_M');
X
------------------------------
你
侯
做
拆
拉
推
6 rows selected.
單人旁的漢字在前,提手旁漢字在後;單人旁的三個漢字進一步又是按照筆畫數多少進行的排序。
7.使用nlssort強制按照“筆畫數”(第一順序)和“部首”(第二順序)排序的方法
sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_STROKE_M');
X
------------------------------
你
拆
拉
侯
做
推
6 rows selected.
可見,越往後的漢字的筆畫數越多。
8.Oracle官方文件中關於NSLSORT函式的描述參考
9.小結
NSLSORT函式在國際化支援上提供了一個非常好的排序解決方案。在具體應用環境下有其重要的意義。善用之。
Good luck.
secooler
10.02.24
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-627797/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【ORDER】改變Oralce對簡體漢字的排序規則(拼音、部首、筆畫)(session級調整)排序Session
- Excel表格如何按漢字的筆畫排序?Excel表格按漢字的筆畫排序的方法Excel排序
- js 漢字按照拼音排序效果JS排序
- Oracle資料庫中文拼音,部首,筆畫排序問題,NLS_SORT設定Oracle資料庫排序
- JavaScript按照漢字拼音順序排序JavaScript排序
- js 漢字陣列按拼音排序JS陣列排序
- iOS 獲取漢字【簡體中文】筆畫數iOS
- oralce中漢字轉為拼音首字母的函式(轉)函式
- mysql按照漢字拼音進行order by排序MySql排序
- 如何讓漢字以拼音字母順序排序排序
- Sql Server資料庫漢字按字母、筆劃、拼音首字母、排序SQLServer資料庫排序
- C#漢字轉漢語拼音C#
- iOS漢字轉拼音的方法iOS
- Oacle中如果按照漢字來排序(order by), 是什麼規則 ?排序
- php獲取漢字的拼音 拼音首字母PHP
- 雲改變了軟體外包規則
- JS 漢字轉換拼音JS
- 漢字轉拼音pl/sqlSQL
- 使用微軟的多語言工具包進行網站簡體與繁體的互轉和得到漢字、拼音、筆畫等相關資訊微軟網站
- C#漢字拼音檢索C#
- C#中漢字轉拼音C#
- 漢字之美,拼音之韻
- Python 漢字轉拼音的庫--- PyPinyinPython
- 查詢漢字筆畫 V1.1
- 開源軟體:釋放創新的力量,改變數字世界的遊戲規則變數遊戲
- js漢字轉換為拼音功能JS
- JavaPinyin4j(漢字轉拼音)JavaAPI
- php 漢字轉換成拼音 程式PHP
- xpinyin:漢字轉換為拼音庫
- 用Oracle的NLSSORT獲取拼音首字母Oracle
- 技術如何改變敏捷的規則敏捷
- oracle 外部表 漢字轉換為拼音Oracle
- ThinkPHP 漢字轉成多種形式拼音PHP
- C# 漢字轉拼音 使用微軟的Visual Studio International Pack 類庫提取漢字拼音首字母C#微軟
- 簡單方法在C#中取得漢字的拼音的首字母(轉)C#
- 陳星漢:我希望改變人們對遊戲的看法遊戲
- SQLSERVER中實現返回漢字筆畫數的函式;SQLServer函式
- 取漢字的拼音首字母的SQL函式SQL函式