SQL Server:如何从二进制或varbinary值中的字节中提取特定位

0 sql-server bit-manipulation bit

我有varbinary值,我想提取第0个字节的前3位,值为0x4D7920546537420537472696E67.

谢谢,

Dam*_*ver 9

这从varbinary值的第一个字节中提取3位:

select CONVERT(tinyint,0x7) & SUBSTRING(0x4D79205465737420537472696E67,1,1)
Run Code Online (Sandbox Code Playgroud)

逻辑是在AND(&)的左侧,我们有一个设置了3位的字节.在右侧,我们从中提取单个字节varbinary(SUBSTRING基于1而不是基于0,因此这是第一个字节).

要从第3个字节中提取最后5位,我们将:

select CONVERT(tinyint,0xF8) & SUBSTRING(0x4D79205465737420537472696E67,3,1)
Run Code Online (Sandbox Code Playgroud)