2

我想用来HEXTORAW()从 ASCII HEX 代码“30”中获取 char 值。ASCII HEX 30 应该返回 varchar '0'。

如何做到这一点?是HEXTORAW()正确的功能吗?

4

3 回答 3

7

您可以专门使用utl_raw包和cast_to_varchar2()函数:

select utl_raw.cast_to_varchar2(hextoraw('30')) as res
  from dual

结果:

RES
-----
0
于 2013-10-21T13:08:56.557 回答
2

您还可以使用CHR(对于单个字符):

SQL> select chr(to_number('30', 'XX')) from dual;

CHR(TO_NUMBER('30','XX'))
-------------------------
0
于 2013-10-21T13:32:43.123 回答
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ÖÐÑÇÜ'

我希望这对其他人有用

于 2017-01-11T09:37:50.850 回答