eygle.com   eygle.com
eygle.com  
 

« 关于ASSM HWM的研究 | Blog首页 | 关于数据文件头信息记录 »

Oracle HowTo:Oracle中如何进行进制转换

作者:eygle |【转载时请务必以超链接形式标明文章和作者信息及本声明
链接:

1.16进制转换为10进制

可以通过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

2.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

3.2进制转换为10进制

从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

3.进制转换也可以通过自定义函数实现
以下函数来自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;
/

-The End-

 

By eygle on 2004-06-16 14:03 | Comments (0) | Posted to HowTo | Edit |Pageviews:

相关文章 随机文章
  • Oracle Patch Set Note And Bug List 参考
  • Oracle 9i 的生命周期支持策略
  • 各取所需:Oracle收购BEA,SUN收购MySQL
  • Oracle还是IBM的中文推广力度大?
  • Oracle与Linux/Unix下的时间处理
  • 幸运的以及更幸运的
    不是春光胜似春光-北京植物园记行
    瑞典游记-正章-初到瑞典
    使用10203事件跟踪Oracle块清除
    柔嘉维则一周年
    网上相关主题:
    Google

    Listed below are links to weblogs that reference Oracle HowTo:Oracle中如何进行进制转换:

    » Oracle HowTo:使用DBMS_UTILITY转换Block地址 from Friends Life and Oracle
    很多时候,我们可以从Oracle的Trace文件中获得Block的DBA(Data Block Address),有时候需要对这个地址进行转换才能得到相应的Block地址。 [Read More]

    Tracked on September 4, 2006 3:48 PM

    留言 (0)

    发表留言:



    Remember Me?
    (输入验证码后方可评论,谢谢支持)



    CopyRight © 2004 eygle.com, All rights reserved.