日期:2014-05-18  浏览次数:20517 次

【交流贴】欢迎大家来批判,各进制之间的转换
争取用最简短的语句来写出来,水平有限,欢迎大家来拍砖。觉得没用可以一笑了之。
详情见:
http://blog.csdn.net/HEROWANG/archive/2009/07/07/4328258.aspx
http://blog.csdn.net/HEROWANG/archive/2009/07/07/4328500.aspx

原文:
/*********************************** 

  作者:trieagle(让你望见影子的墙)

  日期:2009.7.7

  注: 转载请保留此信息

************************************/

SQL code
-----二进制转换十进制-----------------
select sum(data1)
from (  select substring('11011', number, 
1)*power(2,len('11011')-number)data1 
          from (select number from master.dbo.spt_values where type='p')K
          where number <= len('11011')
      ) L
结果:
27
-----八进制转换十进制-----------------
select sum(data1)
from (  select substring('1234567', number, 1)*power(8,len('1234567')-number)data1 
       from (select number from master.dbo.spt_values where type='p')K
       where number <= len('1234567')
     ) L
结果:
342391
-----十六进制转换十进制-----------------
select sum(data1)
from (   select case upper(substring('4eb7', number, 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 substring('4eb7', number, 1)
                end* power(16, len('4eb7') - number) data1 
         from (select number from master.dbo.spt_values where type='p')K
         where number <= len('4eb7')
     ) L
结果:
20151
 
-----十进制转换二进制-----------------
declare @i int,@s varchar(10)
set @i=27
set @s=''
select @s=cast(@i%2 as varchar)+@s,@i=@i/2
from (select number from master.dbo.spt_values where type='p'  and number<10 and power(2,number)<@i)K
order by  number desc 
select @s
结果:
11011
-----十进制转换八进制-----------------
declare @i int,@s varchar(10)
set @i=27
set @s=''
select @s=cast(@i%8 as varchar)+@s,@i=@i/8
from (select number from master.dbo.spt_values where type='p'  and number<10 and power(8,number)<@i)K
order by  number desc 
select @s
结果:
33
-----十进制转换十六进制-----------------
declare @i int,@s varchar(10)
set @i=2379
set @s=''
select @s=case when @i%16 between 10 and 15 then char( @i%16+55) else cast(@i%16 as varchar) end +@s,@i=@i/16
from (select number from master.dbo.spt_values where type='p'  and number<10 )K
order by  number desc 
select @s
结果:
94B

还有二进制向8进制,16进制,8进制、16进制象二进制,待续。

------解决方案--------------------
学习
------解决方案--------------------
JF
------解决方案--------------------
支持一下。
------解决方案--------------------
学习,接分
------解决方案--------------------
学习
------解决方案--------------------
我拍
------解决方案--------------------
学习一下
------解决方案--------------------
楼主可否再加上小数的转换?????
这些转换只适应整数,支持!!!
------解决方案--------------------
SQL code

-----十六进制转换十进制-----------------
--4eb7  前面加0x,sql可以認識~~

select convert(int, 0x4eb7)

/*
----------
20151
*/

------解决方案--------------------
拍拍
------解决方案--------------------