create function f_BinToDec(@bin1 varchar(50),@bin2 varchar(50)) returns varchar(50) as begin declare @i int,@re varchar(50) set @i=1 set @re='' if len(@bin1)<len(@bin2) set @bin1=replicate('0',len(@bin2)-len(@bin1))+@bin1 else set @bin2=replicate('0',len(@bin1)-len(@bin2))+@bin2
while @i<=len(@bin1) begin set @re=@re+case when substring(@bin1,@i,1)=substring(@bin2,@i,1) then '0' else '1' end set @i=@i+1 end return @re end go select dbo.f_BinToDec('000001010101010','100001000000000') declare @bin1 varbinary(20),@bin2 varbinary(20) set @bin1=cast('000001010101010' as varbinary) set @bin2=cast('100001000000000' as varbinary) select dbo.f_BinToDec(cast(@bin1 as varchar),cast(@bin2 as varchar))
drop function dbo.f_BinToDec /*-------------------------------------------------- 100000010101010(1 行受影响) -------------------------------------------------- 100000010101010(1 行受影响)*/
~(位非) ^(位异或) &(位与) |(位或)
declare @n int, @i int, @s varchar(100) set @n = 123 set @i = 0 set @s = '' while @n >= power(2, @i) begin set @s = case when @n & power(2, @i) > 0 then '1' else '0' end + @s set @i = @i + 1 end select @s --1111011
returns varchar(50)
as
begin
declare @i int,@re varchar(50)
set @i=1
set @re=''
if len(@bin1)<len(@bin2)
set @bin1=replicate('0',len(@bin2)-len(@bin1))+@bin1
else
set @bin2=replicate('0',len(@bin1)-len(@bin2))+@bin2
while @i<=len(@bin1)
begin
set @re=@re+case when substring(@bin1,@i,1)=substring(@bin2,@i,1) then '0' else '1' end
set @i=@i+1
end
return @re
end
go
select dbo.f_BinToDec('000001010101010','100001000000000')
declare @bin1 varbinary(20),@bin2 varbinary(20)
set @bin1=cast('000001010101010' as varbinary)
set @bin2=cast('100001000000000' as varbinary)
select dbo.f_BinToDec(cast(@bin1 as varchar),cast(@bin2 as varchar))
drop function dbo.f_BinToDec
/*--------------------------------------------------
100000010101010(1 行受影响)
--------------------------------------------------
100000010101010(1 行受影响)*/
~(位非)
^(位异或)
&(位与)
|(位或)
set @n = 123
set @i = 0
set @s = ''
while @n >= power(2, @i)
begin
set @s = case when @n & power(2, @i) > 0 then '1' else '0' end + @s
set @i = @i + 1
end
select @s --1111011