3

有一个数据库,其中一个表有一个使用二进制位作为标志的字段。因此,根据切换的标志,您可以拥有广泛的值,因此仅查看值是没有帮助的。即,大于 8 的值并不意味着正在使用 8 的值(例如 17 是 16 + 1)。

考虑到这一点,有没有办法更新多个记录以设置或取消设置特定字段的位(例如值 8)?有些记录可能设置了它,而其他记录则没有,所以不要只是简单地添加(或减去)8。

4

2 回答 2

4

您可以使用按位 OR|和 AND&函数;

UPDATE myTable SET myValue = value |  8;   -- set bit 3
UPDATE myTable SET myValue = value & ~8;   -- clear bit 3

(非常)用于测试的简单 SQLfiddle

于 2013-02-23T23:23:37.873 回答
3

使用BIT 功能。设置位 1:

update your_table
set bit_field = bit_field | b'0001'

要取消设置位 1:

update your_table
set bit_field = bit_field & b'1110'

SQLFiddle 演示

于 2013-02-23T23:20:23.070 回答