我尝试找出使用BITAND
.
在数据库中,我将用户权限保存为 BIGINT1101111
或1110001
.
在示例情况下,如果设置了第三位,我必须找出表中的元素。在这种情况下。查询应该找到第一个。
我怎样才能做到这一点??
Select * from USERRIGHTS
WHERE BITAND(Rightmask , 4) = 1 ??????
我尝试找出使用BITAND
.
在数据库中,我将用户权限保存为 BIGINT1101111
或1110001
.
在示例情况下,如果设置了第三位,我必须找出表中的元素。在这种情况下。查询应该找到第一个。
我怎样才能做到这一点??
Select * from USERRIGHTS
WHERE BITAND(Rightmask , 4) = 1 ??????
我找到了解决方案。以“1101111”的形式保存正确的掩码是愚蠢的。我应该以十进制格式保存数据。在这种情况下,1101111 = 111(十进制)或 1110001 = 113。我在我的应用程序中将正确的掩码转换为十进制并以该格式保存。
然后可以检查是否设置了位位置。
这个查询给出了我想要的所有条目:-):
Select * from USERRIGHTS WHERE BITAND(Rightmask , 16) = 16 (第三位是右起第五位。这个值应该用于按位运算。2^(5-1) = 16)
在 Linux、UNIX 和 Windows DB2 平台上,9.5 版中引入了位运算符。