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