查询varbinary位字段

时间:2012-06-02 07:11:16

标签: sql binary bit-manipulation

我正在存储源文件中的哪些行在SQL Server数据库中执行。在我的查询中,我想确定两个文件的执行是否重叠; e.g。

Line Run1 Run2
1    x
2    x    x
3
4         x

Run1执行第1行和第2行,第2行和第2行。我可以通过执行(run1&!run2)看到第1行仅在Run1中执行。

如果我将运行存储为位掩码(varbinary),我如何比较SQL查询中的运行?

create table runs columns filename varchar, runCoverage varbinary;
select filename, andNot(run, 1) from runs group by filename

这会将(选择)运行与其他运行位字段进行比较。理想情况下,我想要OR记录组的位域(来自一个组件的行覆盖数据),然后是AND NOT与另一组记录。我可以计算结果中的1位,这将是一组测试中涵盖的行数,而不是另一组中的行数...

1 个答案:

答案 0 :(得分:0)

如果行数不是太大,你可以简单地将varbinary转换为bigint来进行逐位比较 获取执行第1行的所有文件:

where (cast(runCoverage as bigint) & 1) > 0

或执行第1行旁边任何行的所有文件

where (cast(runCoverage as bigint) & ~1) > 0

如果行数较高,可以使用substr获取一些辅助函数来获取正确的位。然后,也许我完全误解了这个问题。