我有一个新的数据库绑定应用程序。我有一个TableA,其中Column1为二进制(128),始终只包含1个标志。我有另一个TableB,它包含Column5二进制文件(128),其中包含应用于TableA.Column1的位掩码,生成至少有一个标志引发的所有记录。 实施例
TableA
Column1 Record
0000 Product1
0001 Product2
0010 Product3
0100 Product4
1000 Product5
TableB
Column5 Column6
0110 'Cool products'
0101 'Fun products'
申请时
declare @mask as int
select @mask = CAST(TableB.Column5 as int) from TableB WHERE TableB.Column6 = 'Cool products'
select *
from TableA as t
WHERE t.Column1 & @mask <> 0
生产Product3和Product4。一切都按预期工作。为了简化标志分配和风扇性能以及定制搜索掩码的灵活性,我选择了二进制文件。 问题是bigint是64位长,我需要将掩码应用到128位长列,那么我如何实现与上面相同的功能呢?
答案 0 :(得分:1)
类似
create table #a
(
X varbinary(24) null
)
create table #k
(
K varbinary(24) null
)
select X,K
abs(substring(X,1,8)&cast(substring(K,1,8) as bigint))
+abs(substring(X,9,8)&cast(substring(K,9,8) as bigint))
+abs(substring(X,17,8)&cast(substring(K,17,8) as bigint)) as result
from #a,#K
但我不鼓励做这样的操作来组织你的分类法。我认为使用关系和常用的SQL技术会好得多 我没有在现实生活中看到任何这种技术导致性能提升的情况。