本文介绍了翻转 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's NULL" - IFNULL(..., 1)

这篇关于翻转 BIT 数据类型的值并使其为 1 表示 NULL 值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 09:46
查看更多