Oracle中的进制转换

文章作者 100test 发表时间 2007:03:14 13:44:41
来源 100Test.Com百考试题网


1.16进制转换为10进制

可以通过to_number函数实现

SQL> 0select to_number(19f,xxx) from dual.
TO_NUMBER(19F,XXX)
----------------------
415
SQL> 0select to_number(f,xx) from dual.
TO_NUMBER(F,XX)
-------------------
15

2.10进制转换为16进制

可以通过to_char函数转换

SQL> 0select to_char(123,xxx) from dual.
TO_C
----
7b
SQL> 0select to_char(4567,xxxx) from dual.
TO_CH
-----
11d7

3.2进制转换为10进制

从Oracle9i开始,提供函数bin_to_num进行2进制到10进制的转换

SQL> 0select bin_to_num(1,1,0,1) a,bin_to_num(1,0) b from dual.
A B
----- ----------
13 2
SQL> 0select bin_to_num(1,1,1,0,1) from dual.
BIN_TO_NUM(1,1,1,0,1)
---------------------
29

4.进制转换也可以通过自定义函数实现

以下函数来自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.
/



相关文章


在Oracle中实现数据库的复制(一)
2006提高ORACLE数据库的查询统计速度
甲骨文任BrianMitchell为亚太区董事长
2006技术指导海量数据库的查询优化及分页算法
Oracle中的进制转换
2006技术指导存储过程编写经验和优化措施
基于Oracle系统华电国际搭建企业信息化管理平台
Oracle11g数据库的认证体系结构
使用DBMS_SUPPORT包
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛