我有一张包含答案的表格。这个答案是一组数字列表的组合。 (见下文)
可能的值
2 4 8 16 32 64
如果我有答案 24 的答案——我需要一些方法来计算出可以选择的唯一值是 16 和 8。
有人告诉我,如果这在 SQL 中我将使用按位运算。
我在 Access 方面相当先进,但倾向于不使用 VBA 代码,但对所有想法持开放态度。
最佳答案
比较 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 组成”子问题的一种方法。
关于vba - MS Access 中的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143813/