【问题标题】:How to perform bitwise operations arithmetic in MS-ACCESS如何在 MS-ACCESS 中执行按位运算
【发布时间】:2012-02-02 16:32:52
【问题描述】:

在 MSACCESS 内部,我想在查询的 WHERE 子句中使用相对简单的按位运算,例如:

SELECT *
FROM Table1
WHERE Column1 (some operator) 8 = 0

这会:

  • 返回 Column1 未设置其第 4 位的行,例如0, 1, 2, ..., 7(第 4 位清零)和 16(00010000b)
  • 排除 Column1 为 8、9、10、...、15 等的行。

PS:按位运算符与布尔运算不同吗?

【问题讨论】:

    标签: sql ms-access where-clause bitwise-operators


    【解决方案1】:

    你可以:

    WHERE (((column\(2^b)) mod 2) = 1)
    

    编辑:(其中 b 是要测试的特定位)

    OR 在 Access 中不可用,除非您设置 ANSI 模式。

    【讨论】:

    • WHERE (int([column_name]/(2^[zero bit test]) mod 2 = 1)
    【解决方案2】:

    如果您可以在 ANSI-92 Query Mode 中运行查询(例如,通过更改 Access UI 查询模式或使用 ADO 经典或 ADO.NET 连接到它),请使用 BAND 运算符。

    以下代码示例将其打印到即时窗口:

    8 AND 7: -1 
    8 BAND 7: 0 
    

    第一种情况 (AND) 将两个数字都视为 True 值,因此 True AND True 给出 -1 (True)。我认为 BAND 方法是您所追求的。

    Public Sub BitwiseAndQuery()
        'the db engine treats numbers as booleans with AND '
        Debug.Print "8 AND 7: "; _
            CurrentDb.OpenRecordset("SELECT 8 AND 7")(0)
    
        'ADO includes BAND for bitwise AND '
        Dim rs As Object
        Set rs = CreateObject("ADODB.Recordset")
        rs.Open "SELECT (8 BAND 7)", CurrentProject.Connection
        Debug.Print "8 BAND 7:"; rs(0)
        rs.Close
        Set rs = Nothing
    End Sub
    

    【讨论】:

    • 谢谢,我会检查的。使用 ADO.NET 时是否同样适用?
    • 我猜是的。但我不做 ADO.NET,所以我的猜测是毫无价值。 :-)
    • 其他位运算符为BORBXOR
    • 是的,当我通过 ADO.Net 查询 MS-Access 数据库时立即工作。
    【解决方案3】:

    在 VBA 中,您可以将布尔运算符应用于数字以执行按位运算

    (13 AND 8) = 0
    

    但是,在 SQL 中,这不起作用。但是,您可以编写一个在查询中调用的 VBA 函数。

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 1970-01-01
      • 2010-12-15
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      相关资源
      最近更新 更多