2016-05-13 50 views
1

我有这样的一个表:翻转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   | 
+---------+------------+ 

正如你看到的,所有我想要做的是使1NULL^b'1'结果。 (当前结果为NULL。我怎样才能做到这一点?

+1

尝试'更新数字SET numb = IFNULL(numb,0)^ b'1';'。 – wchiquito

+0

@wchiquito嗯,不错。谢谢。 – stack

回答

1

任务结合了两个问题:

  • 翻转了一下,
  • NULL

处理您可以从其他Q &的一个结合bit-toggling solutionIFNULL一个简单即将推出的解决方案:

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

这是你的问题的近字对字的翻译:

  • “翻转位的值” - numb^b'1'
  • “或设置1如果它是NULL” - IFNULL(..., 1)
+0

聪明..!或者这个SET numb = IFNULL(麻木,0,麻木)^ b'1''。谢谢。 upvote – stack

+1

@stack这也可以工作。然而,由于'IFNULL'的结果与'1'的XOR'^'操作相结合,因此需要额外的精神步骤才能理解“NULL”被转换为“1”。 – dasblinkenlight

相关问题