2016-05-13 59 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