我有一张包含答案的表格。这个答案是一组数字的组合。(见下文)
可能的值
2 4 8 16 32 64
如果我有答案 24 的答案——我需要一些方法来计算出可以选择的唯一值是 16 和 8。我被告知如果这在 SQL 中我将使用按位运算。
我在 Access 方面相当先进,但倾向于不使用 VBA 代码,但对所有想法持开放态度。
我有一张包含答案的表格。这个答案是一组数字的组合。(见下文)
可能的值
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”子问题的一种方法。