16进制转换为10进制to_number函数
-- 此处必须为大于或等于16进制字符数的xxxxxx,此处可以为>=6个x
SQL> select to_number('12cbb','xxxxxxxxxxxxxxxxxxxx') from dual;
TO_NUMBER('12CBB','XXXXXXXXXXXXXXXXXXXX')
-----------------------------------------
76987
10进制转换为16进制to_char函数
--此处必须为大于或等于16进制字符数的xx,此处可以为>=2个x
SQL> select to_char('76987','xxxxxxxxxxxxxxxxxxxx') from dual;
TO_CHAR('76987','XXXX
---------------------
12cbb
三.2进制转换为10进制
select bin_to_num(1,1,0,1) a,bin_to_num(1,0) b from dual;
A B
----- ----------
13 2
SQL> select bin_to_num(1,1,1,0,1) from dual;
BIN_TO_NUM(1,1,1,0,1)
---------------------
29
四.十进制转二进制
SQL> select number_2_bit(4) from dual;
NUMBER_2_BIT(4)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
100
SQL> select number_2_bit(2) from dual;
NUMBER_2_BIT(2)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10
create or replace function number_2_bit(v_num number) return varchar is
v_rtn varchar(2000);
v_n1 number;
v_n2 number;
begin
v_n1 := v_num;
loop
v_n2 := mod(v_n1, 2);
v_n1 := trunc(v_n1 / 2);
v_rtn := to_char(v_n2) || v_rtn;
exit when v_n1 = 0;
end loop;
return v_rtn;
end;
大家经常遇到进制转换的问题,网上搜到的转换只是部分十进制与其它进制的转换,所以我把自己写的转换函数提供给大家,4种进制共12个转换函数,虽然有的转换直接使用to_char()就可以实现,但我还是把它们整理到一起,使用和查找都方便。
部分函数需要先创建type_str_agg类型和f_stragg函数才能使用,这两个对象的代码也附在之后。
这些函数并非都是我原创,部分是参照别人的代码整理而来:type_str_agg、f_stragg、f_hex_to_dec、f_oct_to_dec、f_bin_to_dec。