我有一个varbinary列和一个可以大于32的位数。如何设置/测试一个在varbinary列中有数字的位?
我试着去做
convert(varbinary(max), power(2, @bit_number))来获取varbinary,但它仅限于浮点数大小。
有一个扩展的存储过程可以在我们的数据库中对两个varbinaries进行OR运算,但是我需要传递这个很长的varbinary掩码,或者可能有一种方法可以更新varbinary中的一些字节,知道它的编号?
发布于 2018-11-18 11:38:20
您始终可以将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 @SetValuehttps://stackoverflow.com/questions/53355837
复制相似问题