用一条SQL实现其它进制到十进制的转换
问:怎样实现ORACLE中用一条SQL实现其它进制到十进制的转换?A.z,ec!x-w
答:具体示例如下:
u4y0@{&@V
;a%b$|!{u*DK#Ro
-----二进制转换十进制----------------- #Cqq.yYAti
2H ^3to+b:zN
select sum(data1) 'pT1\4c5Ne Z.VcpT
from (select substr('1101', rownum, 1) * power
(2, length('1101') - rownum) data1 _k(af6j
from dual
3s[;T3M wvT do
connect by rownum <= length('1101')) d&H:g-Ww
-----八进制转换十进制-----------------
c+eLE.X@
select sum(data1) %X'@(@"`6gljd
from (select substr('1101', rownum, 1) * power
;} rk}S
(8, length('1101') - rownum) data1 \ [ Ma:UF9S
from dual
;_,q$Z vK;t
connect by rownum <= length('1101'))
-----十六进制转换十进制-----------------
select sum(data1)
from (select (CASE upper(substr('2D', rownum, 1))
WHEN 'A' THEN '10' 0Yi/U%E.m0cv
WHEN 'B' THEN '11'
N5a9Qp%TQi
WHEN 'C' THEN '12' 7l2^;E$Ou
"Mc ? T1P
WHEN 'D' THEN '13'
-^ig'Q,F7hJ;v4qt
WHEN 'E' THEN '14'
W"?5v^O3W
WHEN 'F' THEN '15' 8V*UvJY0}M'I
)V"_|2kQ
ELSE substr('2D', rownum, 1)
END) * power(16, length('2D') - rownum) data1
from dual
'L*vxG }(d%n PS
connect by rownum <= length('2D')) jV)r#aKQEmK
Xp {$\5~ay-|x.B\
注释:
dx:^LKg
对其它进制可以根据例子将power的底数改成相应的进制就可以了。 On7vm1B9XE
N Q*gCJ!V ]w
本文只是一个例子,大家可以把它封装成一个通用函数进行实用。 ;VQ4pR-X)N5H0E
*[POM r
大家在试的时候将里面相应的其它进制的数值换成自己的数据就可以了(有多处)。
页:
[1]