2014-01-10 64 views

回答

8

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

select CONVERT(tinyint,0x7) & SUBSTRING(0x4D79205465737420537472696E67,1,1) 

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

为了从第三个字节的最后5位,我们必须:

select CONVERT(tinyint,0xF8) & SUBSTRING(0x4D79205465737420537472696E67,3,1) 
+0

是否有可能在varbinary上做子串?如果是这样,每个字节算作一个字符? –

+1

@GuillermoGutiérrez - 我链接到它的文档。我不会说每个字节都算作字符。相反,它是根据字节而不是字符显式定义的:“* start *和* length *的值必须以文本,图像,二进制文件的ntext,char或varchar数据类型和字节数的字符数指定varbinary数据类型“。 –

+0

非常感谢...... –

相关问题