我有一个表,它有一个类型为signed integer的列“userextrastatus”。
我正在为各种用户状态存储位。
要设置位,我有一个查询
UPDATE
publicUsers
SET
userExtraStatus = userExtraStatus |1024 |2048 |1
WHERE
userID='1'
所有三位都已设置。列值=3073(1024+2048+1),在我看来这是正确的。
如果我尝试取消设置任何位,例如'1024',并保持剩余位不变,我将使用查询
UPDATE
publicUsers
SET
userExtraStatus = userExtraStatus |1024 &~ 2048 | 1
WHERE
userID='1'
结果仍然是3073
预期结果:1025(3073-2048)
我是否缺少位运算符?
1条答案
按热度按时间nkhmeac61#
你需要用这个。
或者用简单的减号。
请参见演示http://sqlfiddle.com/#!9月25日
更新查询的用法示例。
假设userextrastatus字段包含
( 1024 |2048 | 1 = 3073 )
已经有了。编辑,因为没有评论
有没有一种方法可以在一个查询中混合设置和取消设置位的指令?例如,如果我在一个窗体中为每个位设置了复选框-我不想检查是否已经设置了特定的位-我想设置它从而产生一个查询
UPDATE ... SET status = status | bit1 | bit2 &~ bit3
这是可能的,但你需要像这样使用正确的括号可以使用
这是可能的,但你需要像这样使用正确的括号