[HOWTO]ORACLE中如何实现ASC字符串和16进制串互相转换

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 enhydraboy 的 blog

oracle中如何实现asc字符串和16进制串互相转换

欢迎大家同我交流:enhydraboy   enhydra_boy@tom.com

欢迎转载,请保留本声明,谢谢!

下面是笔者以前回答csdn论坛上问题的总结,希望对大家有用。

asc字符串==>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进制串==>asc字符串
要区分字符集,以中文字符为例,对于数据库字符集是中文,要保证能够正确转回来,要有所不同。

数据库字符集是中文

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么


 

本文关键:ORACLE ASC字符串 16进制串 转换
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top