oracle转换为16进制,Oracle的十进制和16进制转换函数
Oracle的10进制和16进制转换函数
在数据库中,常常需要将10进制转16进制,又会需要将16进制转10进制。有两个使用PL/SQL开发的函数,可以方便使用。
create or replace function f_dec2hex(p_int in varchar2) return varchar2 is
----------------------------------------------
-- 对象名称: f_dec2hex
-- 对象描述: 十进制转换十六进制
-- 输入参数: p_str 十进制字符串
-- 返回结果: 十六进制字符串
-- 测试用例: select f_dec2hex(45217) from dual;
/*
sql> select f_dec2hex(45217) from dual;
f_dec2hex(45217)
--------------------------------------------
b0a1
*/
----------------------------------------------
v_return varchar2(4000);
begin
select upper(trim(to_char(p_int, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) into v_return from dual;
return v_return;
exception
when others then
return null;
end f_dec2hex;
create or replace function f_hex2dec(p_str in varchar2) return varchar2 is
----------------------------------------------
-- 对象名称: f_hex2dec
-- 对象描述: 十六进制转换十进制
-- 输入参数: p_str 十六进制字符串
-- 返回结果: 十进制字符串
-- 测试用例: select f_hex2dec('b0a1') from dual;
/*
sql> select f_hex2dec('b0a1') from dual;
f_hex2dec('b0a1')
--------------------------------------------
45217
*/
----------------------------------------------
v_return varchar2(4000);
begin
select sum(data1) into v_return
from (select (case upper(substr(p_str, rownum, 1))
when 'a' then '10'
when 'b' then '11'
when 'c' then '12'
when 'd' then '13'
when 'e' then '14'
when 'f' then '15'
else substr(p_str, rownum, 1)
end) * power(16, length(p_str) - rownum) data1
from dual
connect by rownum <= length(p_str));
return v_return;
exception
when others then
return null;
end f_hex2dec;
在使用ZHS16GBK的字符集编码数据库中,汉字“啊”的ASCII码就是45217。
SQL> select ascii('啊') from dual;
ASCII('啊')
-----------
45217
转换成16进制,就是B0A1。它的第一个字节(高位字节)是B0,第二个字节即低位字节是A1。
SQL> select f_dec2hex(45217) from dual;
F_DEC2HEX(45217)
--------------------------------------------
B0A1
SQL>
这两个字节也符合GBK字符集编码中的描述,可参见字符集GB2312的理解一文。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)