首页 > 解决方案 > 在 varbinary 中设置位

问题描述

我有一个 varbinary 列和一个可以大于 32 的位数。如何设置/测试在 varbinary 列中有它的数字的位?

我试着做

convert(varbinary(max), power(2, @bit_number))

让我使用 varbinary,但仅限于浮点数。

有一个扩展的存储过程可以对我们的数据库中的两个 varbinary 进行 OR 但我需要传递这个长的 varbinary 掩码,或者也许有一种方法可以更新 varbinary 中的某个字节知道它的数字?

标签: sql-server

解决方案


您始终可以将 varbinary 转换为字符串,对其进行操作,然后再将其转换回来。例如,试试这个:

DECLARE @Foo varbinary(max)
SELECT @Foo = 0x0123456789abcdef0123456789abcdef

DECLARE @Temp varchar(max)
SELECT @Temp = CONVERT(varchar(max), @Foo, 1)
DECLARE @ByteOffset integer;
SELECT @ByteOffset = 3 --offset into varbinary to access
DECLARE @GetValue binary(1)
SELECT @GetValue = CONVERT(binary(1), '0x' + SUBSTRING(@Temp, (@ByteOffset * 2) + 3, 2),1 )
PRINT @GetValue -- fetch the value at @ByteOffset

DECLARE @SetValue binary(1)
SELECT @SetValue = 0x04 --value to modify
DECLARE @Foo2 varbinary(max)
SELECT @Foo2 = CONVERT(varbinary(max), SUBSTRING(@Temp, 1, (@ByteOffset * 2) + 2) + SUBSTRING(CONVERT(varchar, @SetValue, 1), 3, 2) + SUBSTRING(@Temp, (@ByteOffset * 2) + 5, LEN(@Temp)), 1)
PRINT @Foo2 --contains the new varbinary with @ByteOffset updated with @SetValue

推荐阅读