当前位置: 首页 > 面试题库 >

如何在两个二进制类型之间的SQL Server中按位异或?

马侯林
2023-03-14
问题内容

根据以下链接: 按位运算符(Transact-SQL), 我们可以在二进制与int,smallint,tinyint或反之亦然之间进行按位运算。

但是,如何在两个二进制类型之间的SQL Server中进行按位异或运算呢?还是如果不可能,如何将二进制/ varbinary拆分为单个字节?

我要求这样做的原因是因为我需要对大于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,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)))


 类似资料:
  • 我想使用Thrift发送1024字节的数据。它必须正好是1024字节,因为它是与其他框架的比较基准。 Thrift有两种类型来表示字节:“byte”和“binary”,但我不知道如何使用这些类型“binary”类型映射到std::string,这很奇怪(我不明白为什么以及如何使用它)。”字节的类型被映射到一个8位整数,这对我来说似乎更符合逻辑。 要表示1024字节的数据,我使用:

  • 我正在做一些基于数据的事情,我需要将一个表从一个模型复制到另一个模型,但我尝试了很多方法都没有效果。有什么办法可以这样做吗?

  • 问题内容: 我正在使用JMap Viwer在Java中使用OpenStreet Maps http://wiki.openstreetmap.org/wiki/JMapViewer我可以加载地图,一切正常,但是我不知道如何从纬度在两点之间绘制一条线和经度。 任何人都知道画这种线的功能吗? 谢谢。 问题答案: 该方法对于这个作品,但默默拒绝有少于三个顶点的多边形。对于两点之间的直线,只需重复最后一个

  • 首先,哪个是最好和最快的unix命令来仅获取两个文件之间的差异?我尝试使用diff来做到这一点(如下)。 我尝试了Neilvert Noval在这里给出的答案-逐行比较两个文件,并在另一个文件中生成差异 法典- 但是,我有很多空间和 我的file1.txt有- 我的file1.txt有- 输出 - “ 此处#Many空格# 预期输出-很高兴来到这里:)

  • 问题内容: 我正在使用ES,并且我需要一个查询,该查询返回两个datetime(mysql timediff)之间的差,但是还没有找到ES的任何功能来做到这一点。有人可以帮助我吗? MySQL查询 谢谢! 问题答案: 最好的是脚本字段。如果您已启用动态脚本并且这些日期字段在映射中定义为日期,则上述搜索查询应该可以正常工作。 请注意,您将获得epoch的结果,您需要将其转换为面额。 您可以在此处阅读

  • 问题内容: 我一组有四个按钮。这只是两个示例,因为它们都是重复的代码。我想在每个按钮之间创建一个很小的空间,以免它们彼此碰到。我几乎尝试了中的所有方法,但没有任何效果。 问题答案: 如果要在组件之间留有空间,则可以为一个或两个组件添加一个空边框,或插入不可见的组件以提供空间。您可以在Box类的帮助下创建不可见的组件。 由于您已经使用过胶水,但没有成功(我怀疑为什么吗?),因此您可以尝试使用类似 R