我正在存储源文件中的哪些行在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位,这将是一组测试中涵盖的行数,而不是另一组中的行数...
答案 0 :(得分:0)
如果行数不是太大,你可以简单地将varbinary转换为bigint来进行逐位比较 获取执行第1行的所有文件:
where (cast(runCoverage as bigint) & 1) > 0
或执行第1行旁边任何行的所有文件
where (cast(runCoverage as bigint) & ~1) > 0
如果行数较高,可以使用substr获取一些辅助函数来获取正确的位。然后,也许我完全误解了这个问题。