用Oracle的NLSSORT獲取拼音首字母
用Oracle的NLSSORT獲取拼音首字母
最近,某系統上線,需要將基礎資料初始匯入進系統,其中有客戶名稱一列對應著客戶助記符一列,助記符是由客戶名稱取各個漢字拼音首字母而得來的.
所以,需要獲取漢字字串的拼音首字母.
此前,接觸過漢字編碼(國標區位碼)的一些知識:
國標區位碼錶(GB2312-80),共設定94個區,每個區94個位.(所以稱為區位碼).一共7445個字元,其中漢字6763個.
第1-9區是符號部分,從16區開始是漢字部分,漢字部分按漢字是否常用分為上下兩個區域,第16-55區是上半區域,漢字按拼音排序,共3755個,
第56-87區是下半區域,漢字按部首(筆畫筆形)排序,共3008個.
基於此原理,網上也廣泛流傳一些程式碼(包括使用Delphi,VFP等等開發語言的,也包括使用Excel巨集功能程式碼的).測試了一下,對於上半區的漢字都能很好的處理,取得正確的拼音首字母,而對於下半區的漢字,要麼一概獲取成字母z,要麼獲取成其他非字母字元.
總之,是不甚理想.
想到Oracle資料庫有字符集等等概念(SQL Server有排序規則的概念),所以,從網路上查詢資料庫方面的獲取拼音首字母的方法.
還真是找到了效果理想的函式.摘記於下.
其中,核心就是利用NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M')來根據簡體中文拼音取的順序編號,然後與其分界編號進行對比,得到首字母.
----注:以下是摘記.不是原創.
CREATE OR REPLACE FUNCTION F_GET_PY_CAP(P_NAME IN VARCHAR2)
RETURN VARCHAR2 AS
v_word VARCHAR2(10);
V_COMPARE VARCHAR2(100);
V_RETURN VARCHAR2(4000);
FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
END;
BEGIN
FOR I IN 1 .. LENGTH(P_NAME) LOOP
v_word := SUBSTR(P_NAME, I, 1);
V_COMPARE := F_NLSSORT(v_word);
IF V_COMPARE >= F_NLSSORT('a') AND V_COMPARE <= F_NLSSORT('z') THEN
V_RETURN := V_RETURN || v_word;
ELSIF V_COMPARE >= F_NLSSORT('A') AND V_COMPARE <= F_NLSSORT('Z') THEN
V_RETURN := V_RETURN || v_word;
ELSIF V_COMPARE >= F_NLSSORT('0') AND V_COMPARE <= F_NLSSORT('9') THEN
V_RETURN := V_RETURN || v_word;
ELSIF V_COMPARE >= F_NLSSORT('吖') AND V_COMPARE <= F_NLSSORT('驁') THEN
V_RETURN := V_RETURN || 'a';
ELSIF V_COMPARE >= F_NLSSORT('八') AND V_COMPARE <= F_NLSSORT('簿') THEN
V_RETURN := V_RETURN || 'b';
ELSIF V_COMPARE >= F_NLSSORT('嚓') AND V_COMPARE <= F_NLSSORT('錯') THEN
V_RETURN := V_RETURN || 'c';
ELSIF V_COMPARE >= F_NLSSORT('咑') AND V_COMPARE <= F_NLSSORT('鵽') THEN
V_RETURN := V_RETURN || 'd';
ELSIF V_COMPARE >= F_NLSSORT('妸') AND V_COMPARE <= F_NLSSORT('樲') THEN
V_RETURN := V_RETURN || 'e';
ELSIF V_COMPARE >= F_NLSSORT('發') AND V_COMPARE <= F_NLSSORT('猤') THEN
V_RETURN := V_RETURN || 'f';
ELSIF V_COMPARE >= F_NLSSORT('旮') AND V_COMPARE <= F_NLSSORT('腂') THEN
V_RETURN := V_RETURN || 'g';
ELSIF V_COMPARE >= F_NLSSORT('妎') AND V_COMPARE <= F_NLSSORT('夻') THEN
V_RETURN := V_RETURN || 'h';
ELSIF V_COMPARE >= F_NLSSORT('丌') AND V_COMPARE <= F_NLSSORT('攈') THEN
V_RETURN := V_RETURN || 'j';
ELSIF V_COMPARE >= F_NLSSORT('咔') AND V_COMPARE <= F_NLSSORT('穒') THEN
V_RETURN := V_RETURN || 'k';
ELSIF V_COMPARE >= F_NLSSORT('垃') AND V_COMPARE <= F_NLSSORT('擽') THEN
V_RETURN := V_RETURN || 'l';
ELSIF V_COMPARE >= F_NLSSORT('嘸') AND V_COMPARE <= F_NLSSORT('椧') THEN
V_RETURN := V_RETURN || 'm';
ELSIF V_COMPARE >= F_NLSSORT('拏') AND V_COMPARE <= F_NLSSORT('瘧') THEN
V_RETURN := V_RETURN || 'n';
ELSIF V_COMPARE >= F_NLSSORT('筽') AND V_COMPARE <= F_NLSSORT('漚') THEN
V_RETURN := V_RETURN || 'o';
ELSIF V_COMPARE >= F_NLSSORT('妑') AND V_COMPARE <= F_NLSSORT('曝') THEN
V_RETURN := V_RETURN || 'p';
ELSIF V_COMPARE >= F_NLSSORT('七') AND V_COMPARE <= F_NLSSORT('裠') THEN
V_RETURN := V_RETURN || 'q';
ELSIF V_COMPARE >= F_NLSSORT('亽') AND V_COMPARE <= F_NLSSORT('鶸') THEN
V_RETURN := V_RETURN || 'r';
ELSIF V_COMPARE >= F_NLSSORT('仨') AND V_COMPARE <= F_NLSSORT('蜶') THEN
V_RETURN := V_RETURN || 's';
ELSIF V_COMPARE >= F_NLSSORT('侤') AND V_COMPARE <= F_NLSSORT('籜') THEN
V_RETURN := V_RETURN || 't';
ELSIF V_COMPARE >= F_NLSSORT('屲') AND V_COMPARE <= F_NLSSORT('鶩') THEN
V_RETURN := V_RETURN || 'w';
ELSIF V_COMPARE >= F_NLSSORT('夕') AND V_COMPARE <= F_NLSSORT('鑂') THEN
V_RETURN := V_RETURN || 'x';
ELSIF V_COMPARE >= F_NLSSORT('丫') AND V_COMPARE <= F_NLSSORT('韻') THEN
V_RETURN := V_RETURN || 'y';
ELSIF V_COMPARE >= F_NLSSORT('帀') AND V_COMPARE <= F_NLSSORT('咗') THEN
V_RETURN := V_RETURN || 'z';
END IF;
END LOOP;
RETURN upper(V_RETURN);
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29512902/viewspace-1399416/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php獲取漢字的拼音 拼音首字母PHP
- [轉]SQL獲取漢字拼音首字母函式SQL函式
- 在Excel中如何獲取漢字拼音首字母?Excel
- 在vc中實現獲取漢字拼音的首字母
- 如何獲取漢字拼音首字母?一般用於通訊錄
- 摘抄Excel和FoxPro獲取漢字拼音首字母縮寫的方法.Excel
- 取漢字的拼音首字母的SQL函式SQL函式
- 返回字串的拼音首字母 (轉)字串
- mysql獲取漢字的首字母MySql
- java獲取漢字的首字母Java
- ORACLE SQL函式中文漢字轉拼音首字母OracleSQL函式
- 獲取漢字串的拼音助記碼字串
- C# 獲取漢字首字母C#
- 城市列表-根據拼音首字母排序排序
- C#中取得漢語拼音首字母C#
- 【NLSSORT】改變Oralce 對簡體漢字的排序規則(拼音、部首、筆畫)排序
- Python 獲取中文字拼音首個字母Python
- oralce中漢字轉為拼音首字母的函式(轉)函式
- DB2中建立漢字拼音首字母的SQL函式DB2SQL函式
- 簡單方法在C#中取得漢字的拼音的首字母(轉)C#
- C# 漢字轉拼音 使用微軟的Visual Studio International Pack 類庫提取漢字拼音首字母C#微軟
- nlssort可以用來進行語言排序排序
- js實現的讓文字以拼音首字母順序進行排序程式碼JS排序
- 獲取Oracle DBIDOracle
- Sql Server資料庫漢字按字母、筆劃、拼音首字母、排序SQLServer資料庫排序
- 獲取oracle的隱含引數Oracle
- Oracle獲取連線的IP地址Oracle
- oracle獲取ddl指令碼Oracle指令碼
- Oracle 獲取ddl語句Oracle
- Oracle獲取執行計劃的方法Oracle
- 獲取oracle 系統資料的sqlOracleSQL
- myBatis插入oracle獲取主鍵MyBatisOracle
- oracle獲取隱含引數Oracle
- flutter 獲取應用快取以及清除快取Flutter快取
- 用前面建立的函式獲取物件函式物件
- Oracle中獲取TABLE的DDL語句的方法Oracle
- Java中獲取名字首字母的4種方法Java
- Oracle獲取所有表名資訊和獲取指定表名欄位資訊Oracle