MS访问中的按位操作

Sym*_*ner 4 ms-access vba bitwise-and

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

可能的值

2 4 8 16 32 64

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

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

Tom*_*lak 8

比较KB194206(它的要点:"Microsoft Jet数据库引擎不支持SQL中的按位操作.这种行为是设计的."),这基本上意味着你已经陷入了VBA.

在VBA中按位是非常简单的,因为在VBA中所有的局部运算符都是按位的.

只需创建一个包装函数:

Function BitAnd(Value1 As Long, Value2 As Long) As Long
    BitAnd = Value1 And Value2
End Function
Run Code Online (Sandbox Code Playgroud)

并在您的SQL中使用它

WHERE
    BitAnd([someColumn], 64) > 0
Run Code Online (Sandbox Code Playgroud)

为您需要的其他按位操作执行相同的操作.


您也可以在连接中使用它.假设您有一个FlagsTable (FlagValue, FlagName)包含每个可用标志的名称:

SELECT
  d.Id,
  d.BitField,
  f.FlagName
FROM
  DataTable d
  INNER JOIN FlagsTable f ON BitAnd(d.BitField, o.FlagValue) > 0
Run Code Online (Sandbox Code Playgroud)

此查询将是解决"24由16和8组成"子问题的一种方法.