sql-server - 从 varbinary 获取位范围
问题描述
我很欣赏这是一项不太适合 SQL 的任务,但我仍然希望蜂巢思维可以帮助解决问题。
我希望从 var 二进制文件中获取一系列位,但我找不到在 SQL 中执行此操作的简单方法。
DECLARE @data AS VARBINARY(MAX) = 0x0102030405060708
是否可以取回 2 个字节,但从第 12 位开始?
解决方案
看起来你想要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
推荐阅读
- javascript - 如何创建三个同名函数,一个是回调,第二个是承诺,另一个是异步/等待
- python - ndarray和异构ndarray之间的操作
- ios - iOS 和 CouchDB 复制
- c# - 如何添加到 C# 反射中的列表?
- c - 如何为 FFI 创建一个包含可为空函数指针的结构?
- asp.net-mvc-5 - ASP.NET-MVC-5 依赖注入
- javascript - 单击时返回到先前的状态或 Reactjs 中的触发功能
- php - 如何根据用户访问组将smarty代码tpl文件插入tpl文件
- typescript - 为 vue 包创建 typescript 定义文件 (vue-datetime)
- linux - 如何在ansible中根据操作系统类型运行剧本任务?