SQL - 整数类型 - 检测位

时间:2011-08-23 21:27:30

标签: mysql sql bitwise-operators

使用SQL,我想检测某个位是否使用整数列类型(MySQL)?

我该怎么做?

基本上,我想检测一个位是否打开,如果打开,则忽略。

我现在正在使用这样的东西:

WHERE (column & 2) != 2

7 个答案:

答案 0 :(得分:14)

假设您正在检查第3位然后......

SELECT bits & 8 = 8 FROM table;

这将返回二进制(1或0),表示相关位(在本例中是第三个)是否为“位”列中的每一行打开或关闭。

使用2 ^ x代替第8位而不是8。

例如,要检查第5位,我们将使用2 ^ 5 = 32

SELECT bits & 32 = 32 FROM table;

然而,这是不必要的复杂。只需在几列中使用布尔值,就可以使事情变得更容易。

答案 1 :(得分:6)

使用&bitwise AND operator

SELECT ID, myfield
FROM mytable
WHERE (myfield & 16) > 0  

答案 2 :(得分:2)

SQL支持标准位运算符:

DECLARE @BitMask INT
SET @BitMask = 34

SELECT 
    @BitMask & 32, -- Returns 32, ON 
    @BitMask & 16  -- Returns 0, OFF

答案 3 :(得分:1)

对于mysql,您可以使用带位掩码的按位AND运算符&

例如,如果为column1设置了位2(从0开始计数),则获取布尔值true,请使用:

where (column1 & 4) = 4

这将用于多位检查,例如检查位0和2都已设置:

where (column1 & 5) = 5

答案 4 :(得分:0)

您应该标记您正在使用的数据库平台的问题。

如果这是SQL Server 2008,您可以使用按位运算符(特别是按位或等号)来比较一个整数,该位的位设置为您要测试的模式:http://msdn.microsoft.com/en-us/library/cc627409.aspx

请注意,通过以这种方式打包整数,您可能会阻止在这些列上使用任何索引。

答案 5 :(得分:0)

我相信这会帮助你实现你想要的目标:

SQL bit manipulation

答案 6 :(得分:0)

在TSQL中,1 =真,0 =假 在MS Access中,-1 = true,0 = false ...
也许有人可以填写其他方言。

如果您在应用程序层中解释一下,您应该能够使用转换函数(例如,在vb中,您可能会说IF convert.toboolean(myValue) THEN...来解释真或假。