有这种转换吗?
主要是怎样把中文转换成十进制,十进制转换为十六进制.
SQL> select ascii('中') from dual;ASCII('中')
-----------
54992Executed in 0.01 secondsSQL> select ascii('中国') from dual;ASCII('中国')
-------------
54992以上测试不能以中文字符串形式作转为,只能单个作测试了十进制转成十六进制可以参考以下:
http://expert.csdn.net/Expert/topic/1890/1890719.xml?temp=.1711084大家对以上说法有不同意观点,继续发表(以上只是个人观点)
主要是怎样把中文转换成十进制,十进制转换为十六进制.
SQL> select ascii('中') from dual;ASCII('中')
-----------
54992Executed in 0.01 secondsSQL> select ascii('中国') from dual;ASCII('中国')
-------------
54992以上测试不能以中文字符串形式作转为,只能单个作测试了十进制转成十六进制可以参考以下:
http://expert.csdn.net/Expert/topic/1890/1890719.xml?temp=.1711084大家对以上说法有不同意观点,继续发表(以上只是个人观点)
可以使用Java编写Java过程来实现,不会很困难。但是数据库的负载比较大。
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;
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么
字符集:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
在中文字符集下,HexToAsc应该修改成
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;
/