2

我有一个使用BIT类型(1/0)的列。我有一些记录设置为 1,一些记录设置为 0。这些记录标志需要反转。所以基本上,我想要所有 1 设置为 0 的记录,以及所有 0 设置为 1 的记录。

如果我跑

Update Table1 Set Flag = 1 Where Flag = 0

首先,恐怕现在所有记录标志都为1,并且无法知道哪些标志= 0。

有什么建议么?

谢谢!

4

5 回答 5

5

这是一种无需 CASE 语句即可使用按位运算符代替的方法:

update Table1
set flag = ~flag

希望这可以帮助!

于 2013-06-30T16:26:21.290 回答
3

要否定所有bit字段的值,请在一次操作中完成。你可以使用一个CASE

UPDATE table1
SET    flag = CASE flag
                WHEN 1 THEN 0
                WHEN 0 THEN 1
              END 

按位异或

UPDATE table1
SET    flag = flag ^ 1
于 2013-06-30T16:19:07.447 回答
1

有一个简单的算术:

update table1
  set Flag = 1 - Flag

马丁史密斯的第二个答案可以简化为更加晦涩:

update table1
  set Flag ^= 1

非常适合击键挑战,但我认为它不会提高可读性、可维护性或性能。

于 2013-06-30T17:23:23.380 回答
0

尝试以下查询:

update table1
set flag = case when flag = 1 then 0 else 1 end

它肯定会解决你的问题。

于 2013-06-30T16:19:42.680 回答
0
 Update table1 
  Set flag = Case flag 
      When 1 then 0 
      Else 1 End
于 2013-06-30T16:20:30.540 回答