我想用来HEXTORAW()
从 ASCII HEX 代码“30”中获取 char 值。ASCII HEX 30 应该返回 varchar '0'。
如何做到这一点?是HEXTORAW()
正确的功能吗?
您可以专门使用utl_raw包和cast_to_varchar2()函数:
select utl_raw.cast_to_varchar2(hextoraw('30')) as res
from dual
结果:
RES
-----
0
您还可以使用CHR
(对于单个字符):
SQL> select chr(to_number('30', 'XX')) from dual;
CHR(TO_NUMBER('30','XX'))
-------------------------
0
我在使用扩展 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ÖÐÑÇÜ'
我希望这对其他人有用