利用 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內建的 拼音指南 功能來達到這...