ORACLE connect by语法的一个妙用,也许没有太多的实用价值,不过我想可以给我们在解决实际的问题时给于一定的启发。
ORACLE中用一条SQL实现其它进制到十进制的转换
注:
对其它进制可以根据例子将power的底数改成相应的进制就可以了。
本文只是一个例子,大家可以把它封装成一个通用函数进行实用。
大家在试的时候将里面相应的其它进制的数值换成自己的数据就可以了(有多处)。
-----二进制转换十进制-----------------
select sum(data1)
from (select substr( '1101 ', rownum, 1) * power(2, length( '1101 ') - rownum) data1
from dual
connect by rownum <= length( '1101 '))
-----八进制转换十进制-----------------
select sum(data1)
from (select substr( '1101 ', rownum, 1) * power(8, length( '1101 ') - rownum) data1
from dual
connect by rownum <= length( '1101 '))
-----十六进制转换十进制-----------------
select sum(data1)
from (select (CASE upper(substr( '2D ', rownum, 1))
WHEN 'A ' THEN '10 '
WHEN 'B ' THEN '11 '
WHEN 'C ' THEN '12 '
WHEN 'D ' THEN '13 '
WHEN 'E ' THEN '14 '
WHEN 'F ' THEN '15 '
ELSE substr( '2D ', rownum, 1)
END) * power(16, length( '2D ') - rownum) data1
from dual
connect by rownum <= length( '2D '))
此文转自csdn论坛。
ORACLE中用一条SQL实现其它进制到十进制的转换
注:
对其它进制可以根据例子将power的底数改成相应的进制就可以了。
本文只是一个例子,大家可以把它封装成一个通用函数进行实用。
大家在试的时候将里面相应的其它进制的数值换成自己的数据就可以了(有多处)。
-----二进制转换十进制-----------------
select sum(data1)
from (select substr( '1101 ', rownum, 1) * power(2, length( '1101 ') - rownum) data1
from dual
connect by rownum <= length( '1101 '))
-----八进制转换十进制-----------------
select sum(data1)
from (select substr( '1101 ', rownum, 1) * power(8, length( '1101 ') - rownum) data1
from dual
connect by rownum <= length( '1101 '))
-----十六进制转换十进制-----------------
select sum(data1)
from (select (CASE upper(substr( '2D ', rownum, 1))
WHEN 'A ' THEN '10 '
WHEN 'B ' THEN '11 '
WHEN 'C ' THEN '12 '
WHEN 'D ' THEN '13 '
WHEN 'E ' THEN '14 '
WHEN 'F ' THEN '15 '
ELSE substr( '2D ', rownum, 1)
END) * power(16, length( '2D ') - rownum) data1
from dual
connect by rownum <= length( '2D '))
此文转自csdn论坛。