浅议Oracle中的进制转换,浅议Oracle中的进制转换
【 tulaoshi.com - SQLServer 】
作者: Eygle 出处: BLOG
进制转换是开发中经常需要用到的,本文简单介绍几种常用的进制转化方法.
一 16进制转换为10进制
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/)可以通过to_number函数实现
SQL select to_number(’19f’,’xxx’) from dual; 
TO_NUMBER(’19F’,’XXX’) 
---------------------- 
415 
SQL select to_number(’f’,’xx’) from dual; 
TO_NUMBER(’F’,’XX’) 
------------------- 
15  
二 10进制转换为16进制
可以通过to_char函数转换
SQL select to_char(123,’xxx’) from dual; 
TO_C 
---- 
7b 
SQL select to_char(4567,’xxxx’) from dual; 
TO_CH 
----- 
11d7  
三 2进制转换为10进制
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/)从Oracle9i开始,提供函数bin_to_num进行2进制到10进制的转换
SQL 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  
四 通过自定义函数实现进制转换
以下函数来自AskTom网站,是Tom给出的例子,供参考:
create or replace function to_base( p_dec in number, p_base in number ) 
return varchar2 
is 
l_str varchar2(255) default NULL; 
l_num number default p_dec; 
l_hex varchar2(16) default ’0123456789ABCDEF’; 
begin 
if ( trunc(p_dec) < p_dec OR p_dec < 0 ) then 
raise PROGRAM_ERROR; 
end if; 
loop 
l_str := substr( l_hex, mod(l_num,p_base)+1, 1 ) || l_str; 
l_num := trunc( l_num/p_base ); 
exit when ( l_num = 0 ); 
end loop; 
return l_str; 
end to_base; 
/ 
create or replace function to_dec 
( p_str in varchar2, 
p_from_base in number default 16 ) return number 
is 
l_num number default 0; 
l_hex varchar2(16) default ’0123456789ABCDEF’; 
begin 
for i in 1 .. length(p_str) loop 
l_num := l_num * p_from_base + instr(l_hex,upper(substr(p_str,i,1)))-1; 
end loop; 
return l_num; 
end to_dec; 
/ 
show errors 
create or replace function to_hex( p_dec in number ) return varchar2 
is 
begin 
return to_base( p_dec, 16 ); 
end to_hex; 
/ 
create or replace function to_bin( p_dec in number ) return varchar2 
is 
begin 
return to_base( p_dec, 2 ); 
end to_bin; 
/ 
create or replace function to_oct( p_dec in number ) return varchar2 
is 
begin 
return to_base( p_dec, 8 ); 
end to_oct; 
/  
来源:http://www.tulaoshi.com/n/20160129/1498450.html
看过《浅议Oracle中的进制转换》的人还看了以下文章 更多>>