5

我有一张包含答案的表格。这个答案是一组数字的组合。(见下文)

可能的值

2 4 8 16 32 64

如果我有答案 24 的答案——我需要一些方法来计算出可以选择的唯一值是 16 和 8。我被告知如果这在 SQL 中我将使用按位运算。

我在 Access 方面相当先进,但倾向于不使用 VBA 代码,但对所有想法持开放态度。

4

1 回答 1

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”子问题的一种方法。

于 2014-06-10T14:53:28.370 回答