本文介绍了翻转 BIT 数据类型的值并使其为 1 表示 NULL 值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一张这样的桌子:
// numbers
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(1) |
+---------+------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 0 |
| 4 | NULL |
+---------+------------+
这是我的查询:
UPDATE numbers SET numb = numb ^ b'1';
这是当前输出:
// numbers
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(1) |
+---------+------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | NULL |
+---------+------------+
这是预期输出:
// numbers
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(1) |
+---------+------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 1 |
+---------+------------+
如您所见,我要做的就是使 1
成为 NULL ^ b'1'
的结果.(当前结果为NULL
).我该怎么做?
As you see, All I'm trying to do is making 1
the result of NULL ^ b'1'
. (current result is NULL
). How can I do that?
推荐答案
任务结合了两个问题:
- 稍微翻转一下,然后
- 处理
NULL
您可以将其他问答之一中的位切换解决方案与 IFNULL
易于阅读的解决方案:
You can combine bit-toggling solution from one of your other Q&As with IFNULL
for an easy-to-read solution:
UPDATE numbers SET numb = IFNULL(numb ^ b'1', 1)
这几乎是对您问题的逐字翻译:
This is a nearly word-for-word translation of your question:
- 翻转位的值" -
numb ^ b'1'
- "或者设置
1
如果它是NULL
" -IFNULL(..., 1)
- "flip the value of bit" -
numb ^ b'1'
- "or set
1
if it'sNULL
" -IFNULL(..., 1)
这篇关于翻转 BIT 数据类型的值并使其为 1 表示 NULL 值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!