ORACLE中实现ASCII字符串和16进制串互相转换

王朝oracle·作者佚名  2006-11-24
宽屏版  字体: |||超大  

ASCII字符串==>16进制串

create or replace function AscToHex(sIn IN varchar2)

RETURN varchar2

IS

sTmp varchar2(4000);

i integer;

BEGIN

i:=1;

stmp:='';

for i in 1..length(sIn) loop

sTmp:=sTmp||trim(to_char(ascii(substr(sIn,i,1)),'XXXX'));

end loop;

return sTmp;

END;

16进制串==>ASCII字符串

要区分字符集,以中文字符为例,对于数据库字符集是中文,要保证能够正确转回来,要有所不同。数据库字符集是中文

create or replace function HexToAsc(sIn IN varchar2)

RETURN varchar2

IS

sTmp varchar2(4000);

i integer;

x integer;

BEGIN

i:=1;

stmp:='';

loop

exit when i>length(sIn);

x:=to_number(substr(sIn,i,2),'XXXX');

if x>128 then

sTmp:=sTmp||chr(to_number(substr(sIn,i,4),'XXXX'));

i:=i+4;

else

sTmp:=sTmp||chr(to_number(substr(sIn,i,2),'XXXX'));

i:=i+2;

end if;

end loop;

return sTmp;

END;

数据库字符集是英文

create or replace function HexToAsc(sIn IN varchar2)

RETURN varchar2

IS

sTmp varchar2(4000);

i integer;

BEGIN

i:=1;

stmp:='';

loop

exit when i>length(sIn);

sTmp:=sTmp||chr(to_number(substr(sIn,i,2),'XXXX'));

i:=i+2;

end loop;

return sTmp;

END;

测试,如下:

SQL>select hextoasc(asctohex('你好ABC么')) from dual;

HEXTOASC(ASCTOHEX('你好ABC么'))

-----------------------------------------------------------

你好ABC么

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有