oracle转换为16进制,Oracle的十进制和16进制转换函数

本文介绍如何在Oracle数据库中使用PL/SQL开发的f_dec2hex和f_hex2dec函数进行10进制与16进制之间的转换,通过实例展示了函数的使用方法和一个实际应用场景,包括字符集编码中的ASCII码转换示例。
摘要由CSDN通过智能技术生成

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的理解一文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值