如何MSACCESS执行位运算运算

问题描述:

里面MSACCESS我想查询的WHERE子句中使用比较简单的位操作如这样:如何MSACCESS执行位运算运算

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

这会:

  • 返回行其中Column1没有设置第4位,例如0,1,2,...,7(全都具有它们的第4位清除)和16(它是00010000b)
  • 排除行,其中Column1是8,9,10,...,15等

PS:是不同于布尔操作的按位运算符?

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

下面的代码示例打印这立即窗口:

8 AND 7: -1 
8 BAND 7: 0 

第一种情况(AND)把两个数字作为真值,因此True AND True给出-1(真)。我认为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 
+0

谢谢,我会检查。是否使用ADO.NET时同样适用? – 2012-02-03 04:27:22

+0

我猜想是的,但我不做ADO.NET,所以我的猜测是毫无价值的。:-) – HansUp 2012-02-03 04:57:14

+2

其他按位运算符为“BOR”和“BXOR”。 – onedaywhen 2012-02-03 08:56:34

你可以:

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

编辑:(其中B是特定位进行测试)

或不提供访问,除非您设置ANSI模式。

+1

WHERE(INT([COLUMN_NAME] /(2^[零位测试])模2 = 1) – CrazyEnigma 2012-10-25 18:39:02

在VBA中,您可以将布尔运算符来编号,以便执行位操作

(13 AND 8) = 0 

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