IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]【叶子函数分享四十一】SQL位移运算函数

    maco_wang发表于 2011-03-22 23:03:00
    love 0

    -- =============================================

    -- Author:      <maco_wang>

    -- Create date: <2011-03-22>

    -- Description: <SQL位移运算函数>

    -- =============================================

    go

    --创建函数

    create function displacement(@n as bigint,@m as varchar(3))

    returns int

    as

    begin

        declare @maco varchar(50);set @maco=''

        declare @i int

        declare @x int

        declare @s int

        while (@n<>0)

        begin

           set @maco=@maco+convert(char(1),@n%2)

           set @n=@n/2

        end

        set @maco=reverse(@maco)

        set @maco=RIGHT('0000'+@maco,4)

        set @s=LEN(@maco)

        set @i=convert(int,RIGHT(@m,1))

        set @x=1

        if LEFT(@m,2)='<<'

        begin

          while(@x<=@i)

          begin

           select @maco=@maco+'0'

           select @x=@x+1

          end

          select @maco=RIGHT(@maco,@s)

        end

        if LEFT(@m,2)='>>'

        begin

          while(@x<=@i)

          begin

           select @maco='0'+@maco

           select @x=@x+1

          end

          select @maco=LEFT(@maco,@s)

        end

        set @i=LEN(@maco)

        set @s=0

        while(@i>0)

        begin

          if SUBSTRING(@maco,LEN(@maco)-@i+1,1)='1'

          begin

           select @s=@s+POWER(2,convert(float,@i-1))

          end

          select @i=@i-1

        end

        return @s

    end

     

    --测试示例

    select dbo.displacement(1,'<<3') 

    select dbo.displacement(8,'>>1')

    select dbo.displacement(12,'>>3')

     

    --运行结果

    /*

    8

    4

    1

    */



沪ICP备19023445号-2号
友情链接