在Oracle中獲取拼音助記碼

2021-04-18 17:07:34 字數 3513 閱讀 7005

利用 oracle的現成的排序方法,編寫獲取拼音首字母的函式就十分容易了,只需要找到每個首字母對應開頭漢字和結尾漢字,根據這些邊界漢字進行比較,就可以找到當前漢字的首字母資訊。

用類似的方法,獲取乙個漢字的整個拼音也是可行的,只不過確定字頭字尾的工作會更加的繁瑣。

需要說明的是,這種方法很難處理多音字,一般來說,多音字只能根據 oracle的排序中採用的拼音來返回結果。另外, oracle實現的拼音排序難免存在錯誤,如果發現了錯誤,可以通過對個別字單獨處理的方式來改寫上面的**。

這個函式在 zhs16gbk字符集下編寫,不保證在其他字符集下也能正常工作,不過編寫函式的思路應該是一樣的。

drop function f_pinyin

/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;

/

Oracle獲取拼音碼函式

create or replace function f spellcn p1 varchar2,p2 int default 0 return varchar2 as 獲得漢字拼音首字母 入口引數 漢字字串 是否只取第乙個漢字的拼音首字母 char1 varchar2 2 char2 varcha...

ORACLE獲取中文字串拼音首字母

oracle漢字轉拼音 獲得全拼 拼音首字母 拼音擷取等 效果如下 oracle 字符集 gbk 沒有問題 utf 8 需要修改一下 sql oracle漢字轉拼音 package 1.獲得全拼 www.2cto.com select gethzpy.gethzfullpy 漢字 from dual...

在Excel中為中文新增拼音

excel 2000 2002 2003中不僅沒有提供 拼音指南 這一工具,而且當希望在同一單元格中同時顯示拼音和中文字元時,只能先輸入拼音,然後按下alt enter鍵接著輸入中文.1 啟用拼音資訊的顯示模式 其實,我們可以利用excel 2000 2002 2003內建的 拼音指南 功能來達到這...