暂无图片
oracle 汉字如何转化为拼音全拼
我来答
分享
夜的第七章灬
2024-07-19
oracle 汉字如何转化为拼音全拼

如何编写一个oracle中输入参数为汉字姓名,输出结果为汉字姓名字母全拼的函数

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
刘晓华

思路:创建一个汉字与全拼的对照表,写个函数将传入的参数分解成行,再与对照表join,然后再用listagg组合起来就可以啦

下面是我写的一个例子,对照表内容需补充


create table wp_test(
word varchar2(2),
qp varchar2(30),
primary key(word));

insert into wp_test values('我','Wo');
insert into wp_test values('愛','Ai');
insert into wp_test values('中','Zhong');
insert into wp_test values('華','Hua');
insert into wp_test values('人','Ren');
insert into wp_test values('民','Min');
insert into wp_test values('共','Gong');
insert into wp_test values('和','He');
insert into wp_test values('國','Guo');
commit;

create or replace function split_words(cnnm varchar2) return varchar2 result_cache RELIES_ON(wp_test)
as
i integer;
cnnmSpr varchar2(2000);
lastwfg boolean;
begin
cnnmspr := '';
lastwfg := false;
if length(cnnm) = 0 or cnnm = '' or cnnm is null then
return '';
end if;
for i in 1..length(cnnm) loop
if lastwfg = true then
cnnmspr:=cnnmspr||substr(cnnm,i-1,2)||chr(61); --
lastwfg := false;
else
if ascii(substr(cnnm,i,1)) >= 128 then
lastwfg:= true;
else
cnnmspr:=cnnmspr||substr(cnnm,i,1)||chr(61);
end if;
end if;
end loop;
return trim(cnnmspr);
end;

/

create or replace function Word_2_QP(pString varchar2) return varchar2 result_cache RELIES_ON(wp_test)
as
QP varchar2(2000);
begin
if pstring is null or length(pstring) = 0 then
return '';
end if;
select distinct listagg(decode(sign(length(b.qp)),1,b.qp,a.w),' ') within GROUP (order by 1) over (partition by 1) into QP
from (
select regexp_substr(strWord, '[^=]+', 1, level) as w
from (select ChAddStr(trim(pString)) as strWord from dual)
connect by level <= LENGTH(strWord) - LENGTH(REPLACE(strWord, '='))
and prior dbms_random.value > 0
) a,wp_test b
where a.w = b.word(+);
return QP;
end;

/



暂无图片 评论
暂无图片 有用 0
暂无图片
Thomas

如果汉字和拼音是一对一关系,当然楼上的办法可行。但有些多音字,处理起来就比较麻烦,比如“区”,作姓氏为OU, 在”区别“里读QU, 所以,针对此种情况,程序最好也给个提示,方便手工纠错。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏