我爱电脑技术论坛's Archiver

star2008 发表于 2008-5-16 08:22

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

问:怎样实现ORACLE中用一条SQL实现其它进制到十进制的转换?
uBi/s?$z A.z,ec!x-w

[B%W*p?%kRi4L-p
OBR6A)i H 答:具体示例如下:
me\&Q,iK[2sw'[^ u4y0@{&@V
;a%b$|!{u*DK#Ro

5xg dl7B(eHS -----二进制转换十进制----------------- #Cqq.yYAti
2H^3to+b:z N
select sum(data1) 'pT1\4c5Ne Z.VcpT

0hgL F;S!O*DK#\.N3[6h from (select substr('1101', rownum, 1) * power
d3{&E+F&z
FAQ ucMI+O (2, length('1101') - rownum) data1 _k(af6j

jT!A*kYETU from dual
H*r&dFx.c"[$O@ 3s[;T3MwvT do
connect by rownum <= length('1101')) d&H:g-Ww

.Y#K})xi*Ra
]/kv:m%fd){Xq -----八进制转换十进制-----------------
3k`,hh~L]i8[ c+eLE.X@
select sum(data1) %X'@(@"`6gl jd

e"a j*Z+s1X ? from (select substr('1101', rownum, 1) * power
4vcx(VP6Oi3X ;} rk }S
(8, length('1101') - rownum) data1 \ [ Ma:UF9S

:P_/d\4Pa from dual
&Lp/Y6]6~+u(M ;_,q$Z vK;t
connect by rownum <= length('1101'))
1_ Y&KR2gV;FP(O$Y
An8l9?,knxuI
'XA\ OJ'Q R${ -----十六进制转换十进制-----------------
6K+v;^&g4~ n yr
B9F8c:{0b&Y(e select sum(data1)
3{A:L+@!P;waG,U
2{N#iELX{0? L7P{ from (select (CASE upper(substr('2D', rownum, 1))
!H-dK3zx[0^z.YF
K}"f}9pb1u WHEN 'A' THEN '10' 0Yi/U%E.m0cv

_6F| g_)Q?^ WHEN 'B' THEN '11'
5~kM4bVxR5} Rm N5a9Qp%TQi
WHEN 'C' THEN '12' 7l2^;E$Ou
"Mc ? T1P
WHEN 'D' THEN '13'
XN+}^:p3Zr -^ig'Q,F7hJ;v4q t
WHEN 'E' THEN '14'
M]{1| x [{:m4GE W"?5v^O3W
WHEN 'F' THEN '15' 8V*UvJY0}M'I
)V"_|2kQ
ELSE substr('2D', rownum, 1)
3e"]D | mYK$B0l
%^G$Q/k {'N;^*] END) * power(16, length('2D') - rownum) data1
ft m:V:f
$Tr\3T\;r.i+[ from dual
_ b(A:r5o5Y:h5T 'L*vxG }(d%n PS
connect by rownum <= length('2D')) jV)r#aK QEmK

KXh\Q?
;t%P"Z$[.zy-h\,K/B Xp {$\5~ay-|x.B\
注释:
"E$f^Z[*N%d_
TJ)wm aG
"_ x `h"E7cv dx:^LKg
对其它进制可以根据例子将power的底数改成相应的进制就可以了。 O n7vm1B9XE

G7Q5C^Kd8Z{ {
Y'pzW^\x:xV
2~m,Qu'P9{/I N Q*gCJ!V ] w
本文只是一个例子,大家可以把它封装成一个通用函数进行实用。 ;VQ4pR-X)N5H0E

8{ymq._i4d9vs
H g+l/v4L%U
'J?d![s-[W5a *[POM r
大家在试的时候将里面相应的其它进制的数值换成自己的数据就可以了(有多处)。

页: [1]

Powered by 我爱电脑技术论坛 Archiver 6.1.0  © 2001-2007 本SEO插件由网络人站长论坛出品