如何在MS-ACCESS中执行按位运算算法

时间:2012-02-02 16:32:53

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

在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:位运算符是否与布尔运算不同?

3 个答案:

答案 0 :(得分:5)

你可以:

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

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

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

答案 1 :(得分:4)

如果您可以在ANSI-92 Query Mode中运行查询(例如,通过更改Access UI查询模式或使用ADO classic或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

答案 2 :(得分:1)

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

(13 AND 8) = 0

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