Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 将十六进制转换为字符串_Oracle_Plsql - Fatal编程技术网

Oracle 将十六进制转换为字符串

Oracle 将十六进制转换为字符串,oracle,plsql,Oracle,Plsql,我想使用HEXTORAW()从ASCII十六进制代码“30”中获取字符值。 ASCII十六进制30应返回varchar“0” 怎样才能做到这一点?HEXTORAW()是正确的函数吗?您可以专门使用包和函数: select utl_raw.cast_to_varchar2(hextoraw('30')) as res from dual 结果: RES ----- 0 您还可以使用(对于单个字符): 我在使用扩展ascii范围(ISO拉丁语-1;ISO-8859-1)中的字符时遇到一些困难

我想使用
HEXTORAW()
从ASCII十六进制代码“30”中获取字符值。 ASCII十六进制30应返回varchar“0”

怎样才能做到这一点?
HEXTORAW()
是正确的函数吗?

您可以专门使用包和函数:

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

RES
-----
0
您还可以使用(对于单个字符):


我在使用扩展ascii范围(ISO拉丁语-1;ISO-8859-1)中的字符时遇到一些困难。这样解决:

select chr(to_number('D6','xx') using NCHAR_CS) from dual
select hex_to_ascii('30D6D0D1C7DC') 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 chr(to_number('D6','xx') using NCHAR_CS) from dual
select hex_to_ascii('30D6D0D1C7DC') from dual
输入的十六进制字符串“30D6D0D1C7DC”将转换为“0äÐñÜ”

我希望这对其他人有用