oracle生成首字母,ORACLE获取汉字拼音首字母的函数

CREATE OR REPLACE FUNCTION PUB_GET_PY(p_汉字 CHAR DEFAULT '%')

RETURN CHAR

IS

/********************************************************************

过程名称:PUB_GET_PY

功能:生成汉字拼音的首字符

开发者:葛长伟(dba123.com)

联系方式:

最后修改时间:2004.02.14

说明:

修改记录:

2004.02.14 葛长伟 创建

********************************************************************/

v_汉字内码      NUMBER(8);

v_拼音          CHAR(1);

BEGIN

v_汉字内码 := ASCII(p_汉字);

IF v_汉字内码 BETWEEN 45217 AND 45252 THEN

v_拼音 := 'A';

ELSIF v_汉字内码 BETWEEN 45253 AND 45760 THEN

v_拼音 := 'B';

ELSIF v_汉字内码 BETWEEN 45761 AND 46317 THEN

v_拼音 := 'C';

ELSIF v_汉字内码 BETWEEN 46318 AND 46825 THEN

v_拼音 := 'D';

ELSIF v_汉字内码 BETWEEN 46826 AND 47009 THEN

v_拼音 := 'E';

ELSIF v_汉字内码 BETWEEN 47010 AND 47296 THEN

v_拼音 := 'F';

ELSIF v_汉字内码 BETWEEN 47297 AND 47613 THEN

v_拼音 := 'G';

ELSIF v_汉字内码 BETWEEN 47614 AND 48116 THEN

v_拼音 := 'H';

ELSIF v_汉字内码 BETWEEN 48117 AND 49061 THEN

v_拼音 := 'J';

ELSIF v_汉字内码 BETWEEN 49062 AND 49323 THEN

v_拼音 := 'K';

ELSIF v_汉字内码 BETWEEN 49324 AND 49895 THEN

v_拼音 := 'L';

ELSIF v_汉字内码 BETWEEN 49896 AND 50370 THEN

v_拼音 := 'M';

ELSIF v_汉字内码 BETWEEN 50371 AND 50613 THEN

v_拼音 := 'N';

ELSIF v_汉字内码 BETWEEN 50614 AND 50621 THEN

v_拼音 := 'O';

ELSIF v_汉字内码 BETWEEN 50622 AND 50925 THEN

v_拼音 := 'P';

ELSIF v_汉字内码 BETWEEN 50926 AND 51386 THEN

v_拼音 := 'Q';

ELSIF v_汉字内码 BETWEEN 51387 AND 51445 THEN

v_拼音 := 'R';

ELSIF v_汉字内码 BETWEEN 51446 AND 52217 THEN

v_拼音 := 'S';

ELSIF v_汉字内码 BETWEEN 52218 AND 52697 THEN

v_拼音 := 'T';

ELSIF v_汉字内码 BETWEEN 52698 AND 52979 THEN

v_拼音 := 'W';

ELSIF v_汉字内码 BETWEEN 52980 AND 53640 THEN

v_拼音 := 'X';

ELSIF v_汉字内码 BETWEEN 53641 AND 54480 THEN

v_拼音 := 'Y';

ELSIF v_汉字内码 BETWEEN 54481 AND 55289 THEN

v_拼音 := 'Z';

ELSE

v_拼音 := NULL;

END IF;

RETURN v_拼音;

END PUB_GET_PY;

提取汉字字符串的拼音的首字母,其中去掉空格保留原有字母和数字:

create or replace FUNCTION PUB_GET_STRING_PY(strs varchar2)

return varchar2

is

/***********************************

过程名称:PUB_GET_STRING_PY

功能:生成汉字字符串的拼音首字符

开发者:贺佳利

联系方式:

最后修改时间:2009.09.09

说明:

修改记录:

2009.09.09 贺佳利 创建

**********************************/

v_length number;

v_char varchar2(2);

v_charlength number;

v_charPY varchar2(2);

i int:=1;

myresult varchar2(500):='';

begin

--获取字符串长度

v_length:=length(strs);

while i<=v_length

loop

--按顺序取得字符

v_char:=substr(strs,i,1);

v_charlength:=lengthb(rtrim(v_char));

v_charPY:=rtrim(v_char);

--判断是否是汉字

if v_charlength=2 then

v_charPY:=pub_get_py(rtrim(v_char));

end if;

--将拼音进行连接

myresult:=myresult || v_charPY;

i:=i+1;

end loop;

return myresult;

end PUB_GET_STRING_PY;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
--此函数默认返回汉字拼音首字母,第二个参数不为空则返回全拼。 create or replace function f_getFirstOrFullSpell(p_cnStr In varchar2,p_sign In number default null) return varchar2 as lv_spell varchar2(200); lv_temp Varchar2(10); lv_char varchar2(10); --lv_bytes varchar2(100); li_bytes Integer; --li_pos Integer; begin if p_cnStr is null then return ''; end if; for i In 1..length(p_cnStr) loop lv_char:=substr(p_cnStr,i,1); if lengthb(lv_char) = 1 then lv_spell:=lv_spell||lv_char; elsif lengthb(lv_char) = 2 then --Select replace(substrb(dump(lv_char,1010),instrb(dump(lv_char,1010),'ZHS16GBK:')),'ZHS16GBK: ','') Into lv_bytes from dual; --li_pos:=instr(lv_bytes,','); --li_bytes:=substr(lv_bytes,1,li_pos-1)*256+substr(lv_bytes,li_pos+1)-256*256; Select ascii(lv_char)-256*256 Into li_bytes From dual; select max(spell) Into lv_temp from table(f_getSpellcode) where code<=li_bytes; if p_sign is null then lv_spell:=lv_spell||substr(lv_temp,1,1); else lv_spell:=lv_spell||lv_temp; end if; elsif lengthb(lv_char) = 3 then --Select replace(substrb(dump(convert(lv_char,'ZHS16GBK','UTF8'),1010),instrb(dump(convert(lv_char,'ZHS16GBK','UTF8'),1010),'UTF8:')),'UTF8: ','') --Into lv_bytes from dual; --li_pos:=instr(lv_bytes,','); --li_bytes:=substr(lv_bytes,1,li_pos-1)*256+substr(lv_bytes,li_pos+1)-256*256; Select ascii(lv_char)-256*256 Into li_bytes From dual; select max(spell) Into lv_temp from table(f_getSpellcode) where code<=li_bytes; if p_sign is null then lv_spell:=lv_spell||substr(lv_char,1,1); else lv_spell:=lv_spell||lv_char; end if; end if; end loop; return lv_spell; end; --hanjs,07-10-24,此函数默认返回汉字拼音首字母,第二个参数不为空则返回全拼。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值