首页 > 解决方案 > 从 varbinary 获取位范围

问题描述

我很欣赏这是一项不太适合 SQL 的任务,但我仍然希望蜂巢思维可以帮助解决问题。

我希望从 var 二进制文件中获取一系列位,但我找不到在 SQL 中执行此操作的简单方法。

DECLARE @data AS VARBINARY(MAX) = 0x0102030405060708

是否可以取回 2 个字节,但从第 12 位开始?

标签: sql-server

解决方案


看起来你想要0x2030你的结果。

DECLARE @data AS VARBINARY(MAX) = 0x0102030405060708
SELECT CAST(CAST(CAST(LEFT(@data, 4) AS BINARY(4)) AS BIGINT)/POWER(2,4) AS BINARY(2))

POWER(2,4)是从左移 12 位,然后右移 16 位得到的:* POWER(2/12)/POWER(2/16)然后用 . 截断CAST(... AS BINARY(2))。如果您不关心字节转换,则需要对&结果进行逻辑处理以删除最左边的字节。

DECLARE @data AS VARBINARY(MAX) = 0x0102030405060708
SELECT CAST(CAST(LEFT(@data, 4) AS BINARY(4)) AS BIGINT)/POWER(2,4) & 0xFFFF

推荐阅读