根据这个链接:
Bitwise Operators (Transact-SQL)
我们可以在binary和int,smallint,tinyint之间进行按位运算,反之亦然.
Bitwise Operators (Transact-SQL)
我们可以在binary和int,smallint,tinyint之间进行按位运算,反之亦然.
但是如何在两个二进制类型之间的sql server中进行按位异或?
或者,如果这不可能,我如何将二进制/ varbinary拆分为单个字节?
我要求这个的原因是因为我需要xor两个大于max int值的数字.
谢谢.
解决方法
代码块中的所有注释
-- 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,8)) select @lo = convert(binary(8),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)))
原文地址:https://www.jb51.cc/mssql/78851.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。