oracle汉字转全拼
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle汉字转全拼相关的知识,希望对你有一定的参考价值。
oracle中有一列姓名 如何能在后面加一列对应的全拼姓名列,还有如何挑出多于3个字的姓名,数据量比较大,几千万吧。
技术小白,感谢大神,如果能详细帮忙解答可追加悬赏值。
L_HZ Varchar2(8);
L_PY Varchar2(24);
I Number;
Cursor CUR_PY Is Select C_PY From XT_HZPY Where C_HZ = L_HZ AND ROWNUM<2;
Cursor CUR_PT Is Select SubstrB(C_PY,1,1) From XT_HZPY Where C_HZ = L_HZ AND ROWNUM<2;
--获取汉字拼音函数F_GetHzPy('汉字串','返回大小写,默认为大写,传U为大写,其他字符或D为小写','返回拼音值的每个汉字拼音的间隔符号,默认为空格')
--例如:F_GetHzPy('中华民族','D','/') 返回值为'zhong/hua/minzu'
--例如:F_GetHzPy('中华民族') 返回值为'ZHONG HUA MINZU'
--拼音头例如:F_GetHzPy('中华民族','D','PT') 返回值为'zhmz'
Begin
I:=1;
While I<= Length(V_HZ) Loop
L_HZ := Substr(V_HZ,I,1);
L_PY:=NULL;
If upper(V_FG)<>'PT' Then
OPEN CUR_PY;
FETCH CUR_PY INTO L_PY;
CLOSE CUR_PY;
Else
OPEN CUR_PT;
FETCH CUR_PT INTO L_PY;
CLOSE CUR_PT;
End If;
L_PY:=Replace(L_PY,' ','');
If Nvl(L_PY,'NULL')='NULL' Then
L_PY:=L_HZ;
End If;
If V_XS='U' Then
L_PY:=upper(L_PY);
End If;
If I=Length(V_HZ) Then
V_PY:=V_PY||L_PY;
Else
If V_PY Is NULL Then
V_PY:=L_PY;
Else
If upper(V_FG)<>'PT' Then
V_PY:=V_PY||V_FG||L_PY;
Else
V_PY:=V_PY||L_PY;
End If;
End If;
End If;
I:=I+1;
End Loop;
V_PY:=Trim(V_PY);
Return V_PY;
End;
/ 参考技术A 参考这个帖子 http://bbs.chinaunix.net/thread-3643774-1-1.html, 汉字转拼音是 算法写成函数,和数据量大小没什么关系。
askmaclean oracle本回答被提问者采纳 参考技术B 只用Oracle么? 用没用java?
oracle 汉字转拼音
oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
效果如下: Oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下
Sql代码
--oracle汉字转拼音 PACKAGE
--1.获得全拼 www.2cto.com
SELECT GETHZPY.GETHZFULLPY(‘汉字‘) FROM DUAL;
结果 : HanZi
--2.拼音首字母
SELECT GETHZPY.GETHZPYCAP(‘汉字‘) FROM DUAL;
结果 : HZ
--3.拼音截取等
SELECT GETHZPY.GETHZPYCAPSUBSTR(‘汉字‘, 0, 1) FROM DUAL;
结果 : H www.2cto.com
代码部分太长挂在附件上 以下代码如果在 PL/SQL Developer 执行的话,选择 Command Window 粘贴.
附件在最下面.
代码部分太长挂在附件上 以下代码如果在 PL/SQL Developer 执行的话,选择 Command Window 粘贴.
附件在最下面.
oracle汉字转拼音package_获得全拼——拼音首字母_拼音截取等.zip (35.9 KB)
http://up.2cto.com/2012/0926/20120926102526632.zip
http://up.2cto.com/2012/0926/20120926102526632.zip
以上是关于oracle汉字转全拼的主要内容,如果未能解决你的问题,请参考以下文章