mysql - 如何更新二进制数的一位作为切换?

标签 mysql sql

我有这张表:

// numbers
+---------+------------+
|    id   |    numb    |
+---------+------------+
| int(11) |   bit(10)  |
+---------+------------+
| 1       | 1001100111 |
| 2       | 0111000101 |
| 3       | 0001101010 |
| 4       | 1111111011 |
+---------+------------+

我正在尝试更改(切换)第七位的值(从右到左)。所以关注这个数字:

// for example
1001100111
  ^ seventh digit (rtl)

这是预期的结果:

// new_numbers
+---------+------------+
|    id   |    numb    |
+---------+------------+
| int(11) |   bit(10)  |
+---------+------------+
| 1       | 10<b>1</b>1100111 |
| 2       | 01<b>0</b>1000101 |
| 3       | 00<b>1</b>1101010 |
| 4       | 11<b>0</b>1111011 |
+---------+------------+

我可以像这样更新第七位数字

// set it to zero
UPDATE numbers SET numb = numb & b'1110111111';

但实际上我需要切换它。

  • 如果它是0 则设置它1
  • 如果是1则设置为0

我该怎么做?

最佳答案

通过 XOR ^ 运算完成一点翻转,掩码在您想要切换的位置有 1

之所以可行,是因为 XOR 的真值表如下所示:

  A: 0 0 1 1
  B: 0 1 0 1
A^B: 0 1 1 0

注意B1的列:当A中对应的位为0时,结果为1,反之亦然。

切换第七位是这样完成的:

UPDATE numbers SET numb = numb ^ b'0001000000';

关于mysql - 如何更新二进制数的一位作为切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073289/

相关文章:

php - 动态表单单选按钮搞砸了 foreach 循环 mysql 插入

Python导入MySQLdb : Library not loaded: libmysqlclient. 18.dylib

mysql - SQL UPDATE ... SELECT,或者如果未找到则保持原样

mysql - 一个项目总是放在最后的 SQL 查询

sql - 使用DDD,如何实现批处理?

sql - 查询时索引表是否比非索引表快?

mysql - 用一些字符串替换 NULL

MySQL 查询问题 - 添加额外和总计

sql - 哪个 INSERT 更快 : with VALUES or with SELECT/UNION ALL?

sql - 如何更正BAT文件中的Select Spool