如何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
答
你可以:
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函数。
谢谢,我会检查。是否使用ADO.NET时同样适用? – 2012-02-03 04:27:22
我猜想是的,但我不做ADO.NET,所以我的猜测是毫无价值的。:-) – HansUp 2012-02-03 04:57:14
其他按位运算符为“BOR”和“BXOR”。 – onedaywhen 2012-02-03 08:56:34