How to do bitwise exclusive OR in sql server between two binary types?

后端 未结 4 1547
心在旅途
心在旅途 2021-01-05 03:16

According this link: Bitwise Operators (Transact-SQL) we can do bitwise operation between binary and int, smallint, tinyint or vice versa.

But how can I make a bitwi

4条回答
  •  忘掉有多难
    2021-01-05 03:50

    All comments in code block

    -- variables
    declare @vb1 binary(16), @vb2 binary(16), @lo binary(8), @hi binary(8)
    
    -- 2 guids to compare
    declare @guid1 uniqueidentifier set @guid1 = '96B4316D-1EA7-4CA3-8D50-FEE8047C1329'
    declare @guid2 uniqueidentifier set @guid2 = 'FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'
    
    -- split every 8 bytes into a binary(8), which is a bigint, the largest size usable with XOR
    select @vb1 = @guid1, @vb2 = @guid2
    
    -- xor the high and low parts separately
    select @hi = convert(binary(8), substring(@vb1,1,8)) ^ convert(bigint, substring(@vb2,1,8))
    select @lo = convert(binary(8), substring(@vb1,9,8)) ^ convert(bigint, substring(@vb2,9,8))
    
    -- the final result, concatenating the bytes using char(8) - binary -> uniqueidentifier
    select 'A', @guid1 union all
    select 'B', @guid2 union all
    select 'A XOR B = ', convert(uniqueidentifier, convert(binary(16),convert(char(8),@hi) + convert(char(8),@lo)))
    

提交回复
热议问题