浅议Oracle中的进制转换

homedsasad

homedsasad

2016-01-29 16:23

浅议Oracle中的进制转换,浅议Oracle中的进制转换
 

作者: Eygle 出处: BLOG

  进制转换是开发中经常需要用到的,本文简单介绍几种常用的进制转化方法.

  一 16进制转换为10进制

(本文来源于图老师网站,更多请访问http://m.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进制

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

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;

 
展开更多 50%)
分享

猜你喜欢

浅议Oracle中的进制转换

SQLServer
浅议Oracle中的进制转换

VC++ 中实现进制2进制10进制16进制的相互转换

编程语言 网络编程
VC++ 中实现进制2进制10进制16进制的相互转换

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

ORACLE中如何实现ASCII字符串和16进制串互相转换

编程语言 网络编程
ORACLE中如何实现ASCII字符串和16进制串互相转换

ORACLE中用一条SQL实现其它进制到十进制的转换

编程语言 网络编程
ORACLE中用一条SQL实现其它进制到十进制的转换

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

无限进制转换

编程语言 网络编程
无限进制转换

各种进制转换方法

电脑入门
各种进制转换方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

十大奇功轻松应对局域网十大故障

十大奇功轻松应对局域网十大故障

《Wii Music》指挥法图形一览

《Wii Music》指挥法图形一览
下拉加载更多内容 ↓