繁体   English   中英

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

[英]How to perform bitwise operations arithmetic in MS-ACCESS

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

你可以:

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

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

除非您设置ANSI模式,否则Access中不提供OR。

如果您可以在ANSI-92查询模式下运行查询(例如,通过更改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

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

(13 AND 8) = 0

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM