使用SQL,我想检测某个位是否使用整数列类型(MySQL)?
我该怎么做?
基本上,我想检测一个位是否打开,如果打开,则忽略。
我现在正在使用这样的东西:
WHERE (column & 2) != 2
答案 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)
我相信这会帮助你实现你想要的目标:
答案 6 :(得分:0)
在TSQL中,1 =真,0 =假
在MS Access中,-1 = true,0 = false
...
也许有人可以填写其他方言。
如果您在应用程序层中解释一下,您应该能够使用转换函数(例如,在vb中,您可能会说IF convert.toboolean(myValue) THEN...
来解释真或假。