按二进制的某些字节选择

时间:2013-05-22 19:53:16

标签: sql sql-server sql-server-2012 ssms

有没有办法执行类似下面的SELECT?

SELECT * FROM TheTable WHERE 3rd_to_5th_bytes_of_column_A  = 0x010101;

如果出现严重的性能问题 - 请告诉我。这是一张新桌子。

(当然我可以加载所有数据并在我的C#应用​​程序中搜索它。我的意思是 - 有直接的方式。)

由于评论:如果该列中该行的数据为: 0x010203040506 ,则不会选择该行。但如果数据 0x010201010106 - 它会。

2 个答案:

答案 0 :(得分:2)

或者,您也可以使用Sql Server Bitwise Operators

select * from TheTable where myColumn >= @myMask
    and myColumn & @myMask <> 0

DRY违规行为是When the DRY principle doesn’t apply,与传统的where myColumn & @myMaxk <> 0相比,性能显着提升。

出现此问题是因为执行按位操作会阻止使用索引。

答案 1 :(得分:1)

您可以使用SUBSTRING函数 - 它也适用于二进制/ varbinary / image列。

SELECT * FROM TheTable WHERE SUBSTRING(ColumnA, 2, 3) = 0x010101

http://msdn.microsoft.com/en-us/library/ms187748.aspx