有没有办法执行类似以下 SELECT 的操作?
SELECT * FROM TheTable WHERE 3rd_to_5th_bytes_of_column_A = 0x010101;
如果存在严重的性能问题 - 请告诉我。这是一张新桌子。
(当然,我可以加载所有数据并在我的 C# 应用程序中搜索它。我的意思是 - 有没有直接的方法。)
由于注释:如果该列中该行的数据为:0x010203040506,则不会选择该行。但是如果数据是0x010201010106 - 它会。
有没有办法执行类似以下 SELECT 的操作?
SELECT * FROM TheTable WHERE 3rd_to_5th_bytes_of_column_A = 0x010101;
如果存在严重的性能问题 - 请告诉我。这是一张新桌子。
(当然,我可以加载所有数据并在我的 C# 应用程序中搜索它。我的意思是 - 有没有直接的方法。)
由于注释:如果该列中该行的数据为:0x010203040506,则不会选择该行。但是如果数据是0x010201010106 - 它会。
或者,您也可以使用 Sql Server位运算符
select * from TheTable where myColumn >= @myMask
and myColumn & @myMask <> 0
当 DRY 原则不适用时,违反DRY 原则,与更传统的where myColumn & @myMaxk <> 0
.
出现此问题的原因是执行按位运算会阻止使用索引。
您可以使用SUBSTRING
函数 - 它也适用于 binary/varbinary/image 列。
SELECT * FROM TheTable WHERE SUBSTRING(ColumnA, 2, 3) = 0x010101