翻转BIT数据类型的值,并将其设为1表示NULL值

时间:2016-05-13 16:38:23

标签: mysql sql sql-update

我有一张这样的表:

// 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。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

该任务结合了两个问题:

  • 翻了一下,
  • 处理NULL

您可以将bit-toggling solutionIFNULL中的{{3}}结合使用,以获得易于阅读的解决方案:

UPDATE numbers SET numb = IFNULL(numb ^ b'1', 1)

这是您的问题的几乎逐字翻译:

  • "翻转bit" - numb ^ b'1'
  • "或设置1 NULL" - IFNULL(..., 1)