我有一张包含答案的表格。这个答案是一组数字的组合。 (见下文)
可能的值
2 4 8 16 32 64
如果我得到答案24的答案 - 我需要一些方法来计算出唯一可以选择的值是16和8。 我被告知这是否在SQL中我会使用按位操作。
我在Access方面相当先进,但往往不使用VBA代码,但对所有想法都持开放态度。
答案 0 :(得分:8)
比较KB194206(其中的要点:" Microsoft Jet数据库引擎不支持SQL中的按位操作。此行为是设计使然。" ) ,这基本上意味着你已经被VBA困住了。
VBA中的按位非常简单,因为在VBA 中,所有位置运算符都是按位的。
只需创建一个包装函数:
Function BitAnd(Value1 As Long, Value2 As Long) As Long
BitAnd = Value1 And Value2
End Function
并在SQL
中使用它WHERE
BitAnd([someColumn], 64) > 0
对您需要的其他按位操作执行相同的操作。
您也可以在连接中使用它。假设您有一个FlagsTable (FlagValue, FlagName)
,其中包含每个可用标志的名称:
SELECT
d.Id,
d.BitField,
f.FlagName
FROM
DataTable d
INNER JOIN FlagsTable f ON BitAnd(d.BitField, o.FlagValue) > 0
此查询将是解决您的" 24由16和8" 子问题组成的一种方式。