我想使用HEXTORAW()
从ASCII HEX代码'30'获取char值。
ASCII HEX 30应该返回varchar'0'。
怎么样? HEXTORAW()
是正确的功能吗?
答案 0 :(得分:5)
您可以专门使用utl_raw包和cast_to_varchar2()功能:
select utl_raw.cast_to_varchar2(hextoraw('30')) as res
from dual
结果:
RES
-----
0
答案 1 :(得分:2)
您还可以使用CHR
(对于单个字符):
SQL> select chr(to_number('30', 'XX')) from dual;
CHR(TO_NUMBER('30','XX'))
-------------------------
0
答案 2 :(得分:1)
使用扩展ascii范围(ISO Latin-1; ISO-8859-1)中的字符时遇到了一些困难。像这样解决了:
select chr(to_number('D6','xx') using NCHAR_CS) from dual
其中十六进制值'D6'匹配(扩展)ascii值214或字符'Ö'
或在函数中
create or replace function hex_to_ascii(TEXT_IN varchar2)
RETURN varchar2
as
TEXT_OUT varchar2(200);
TEXT_MAN varchar2(200):=TEXT_IN;
BEGIN
while length(TEXT_MAN)>0
LOOP
TEXT_OUT:=TEXT_OUT||chr(to_number(substr(TEXT_MAN,0,2),'xx') using NCHAR_CS);
TEXT_MAN:=substr(TEXT_MAN,3);
END LOOP;
return TEXT_OUT;
END;
该功能可以这样使用:
select hex_to_ascii('30D6D0D1C7DC') from dual
输入十六进制字符串'30D6D0D1C7DC'将转换为'0ÖÐÑÇÜ'
我希望这对其他人有用