Oracle函式獲取漢字的首字母

2021-10-22 18:45:23 字數 4180 閱讀 8073

專案當中涉及到為資料字典中的名稱設定相應的**,為了增強**的可讀性,考慮使用名稱中漢字的首字母組成**,比如名稱是政策環境,**就用zchj。下面的函式實現了獲取漢字首字母的功能。

create or replace function f_pinyin(p_name in varchar2) return varchar2 as

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_compare := f_nlssort(substr(p_name, i, 1));

if 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 v_return;

end;

呼叫函式測試:

1、設定nls_sort引數值

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

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

schinese_pinyin_m 按照拼音排序

2、session級別的設定,修改oracle欄位的預設排序方式:

按拼音:alter session set nls_sort = schinese_pinyin_m;

按筆畫:alter session set nls_sort = schinese_stroke_m;

按偏旁:alter session set nls_sort = nls_sort=schinese_radical_m;

3、語句級別設定排序方式:

按照筆劃排序:select * from dept order by nlssort(name,'nls_sort=schinese_stroke_m');

按照部首排序:select * from dept order by nlssort(name,'nls_sort=schinese_radical_m');

按照拼音排序,此為系統的預設排序方式:select * from dept order by nlssort(name,'nls_sort=schinese_pinyin_m');

4、修改系統引數(資料庫所在作業系統):

set nls_sort=schinese_radical_m ;export nls_sort (sh)

setenv nls_sort schinese_radical_m (csh)

hklc/software/oracle/home0/nls_sort (win登錄檔)

獲取漢字拼音首字母

有個專案需要用到生成漢字的首字母,但從網上查了一下,對於多音字的處理都不是很好,所以就利用pinyin4j這個工具包自己寫了乙個。用到的jar包是pinyin4j 2.5.0.jar 獲取拼音首字母,多音字用逗號隔開 public static string getfirstspell string...

獲取漢字拼音首字母

unit py inte ce uses sysutils 獲取漢字的拼音首字元,這個函式將用在getpyindexstr 中.function getpyindexchar strchinese string bupcase boolean true char 獲取多個漢字的拼音首字元組成的字串....

獲取漢字拼音首字母

獲取漢字拼音首字母 獲取漢字拼音首字母 很好用.覺的不錯的幫頂 1.下面的不上亂碼是位元組 第一步建立乙個函式 create or replace function f trans pinyin capital p name in varchar2 return varchar2 as v comp...