暂无图片
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
打赏 0
暂无图片
Thomas

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

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
请问下,这些日志都是些什么,日志很多。没见这个PID,进程里
回答 1
我的问题怎么会在这里,有20多g这样的文件,进城号已经没有了,但是还在写这样的信息。看了好几个是从3月份开始写的的。
各位大佬问个问题,lv里面提示显示有19T,但是挂在文件夹下,只有16T,是为什么呢?
回答 1
不太可能吧,lv就是划好的具体逻辑卷盘,挂到目录下大小肯定一样的,你说的不会是vg吧,vg不一样,一个vg可以化多个lv
Oracle RAC+DG在备库不建库情况下,为什么ASM不能创建文件?
回答 2
最好贴个图上来,asm里面就没有touch或者create命令,所以不能创建普通文件。
Oracle group by之后想要查询其他列,怎么操作?
回答 1
已采纳
having
请教大神,oracle 12.1.0.2.0 ,oracle自身有个SQL 比较耗性能的能不能优化的?
回答 1
咋看出来耗费性能的?查询动态性能视图v$sqlarea应该会很快
多实例数据库,它们的sga是共享的还是分别独立的?
回答 3
已采纳
你的实例如果说是按照端口来划分的那种(也就是俗称的instance的)。那么每个是独立的。不过不推荐这样。你还不如用多个schema在一个数据库实例上。或者用PDB模式。如果说是PDB模式的话,每个P
有谁遇到过 impdp导入19c rac集群数据库时,监听出现一堆service 的案列,数据库是19.11
回答 3
这个问题怎么解决的,我也遇到了
在WHERE子句中必须使用圆括号吗?
回答 1
已采纳
任何时候使用具有AND和OR操作符的WHERE子名,都应该使用圆括号明确操作顺序。如果条件较多,即使能确定计算次序,默认的计算次序也可能会使语句不易理解,因此使用括号明确操作符的次序,是一个好习惯。
Oracle expdp导出 schemas 这个参数有什么作用?
回答 3
expdp参数DIRECTORY:用于转储文件和日志文件的目录对象。DUMPFILE:指定导出备份文件的命名。LOGFILE:指定导出备份日志的命名。里面记录了备份中的信息。FULL:导出整个数据库(
alterlog报错
回答 4
ifconfiglomtu16384我这个lo的值是65536了还需要修改吗
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~