我有一个使用BIT
类型(1/0)的列。我有一些记录设置为 1,一些记录设置为 0。这些记录标志需要反转。所以基本上,我想要所有 1 设置为 0 的记录,以及所有 0 设置为 1 的记录。
如果我跑
Update Table1 Set Flag = 1 Where Flag = 0
首先,恐怕现在所有记录标志都为1,并且无法知道哪些标志= 0。
有什么建议么?
谢谢!
我有一个使用BIT
类型(1/0)的列。我有一些记录设置为 1,一些记录设置为 0。这些记录标志需要反转。所以基本上,我想要所有 1 设置为 0 的记录,以及所有 0 设置为 1 的记录。
如果我跑
Update Table1 Set Flag = 1 Where Flag = 0
首先,恐怕现在所有记录标志都为1,并且无法知道哪些标志= 0。
有什么建议么?
谢谢!
这是一种无需 CASE 语句即可使用按位运算符代替的方法:
update Table1
set flag = ~flag
希望这可以帮助!
要否定所有bit
字段的值,请在一次操作中完成。你可以使用一个CASE
UPDATE table1
SET flag = CASE flag
WHEN 1 THEN 0
WHEN 0 THEN 1
END
或按位异或
UPDATE table1
SET flag = flag ^ 1
有一个简单的算术:
update table1
set Flag = 1 - Flag
马丁史密斯的第二个答案可以简化为更加晦涩:
update table1
set Flag ^= 1
非常适合击键挑战,但我认为它不会提高可读性、可维护性或性能。
尝试以下查询:
update table1
set flag = case when flag = 1 then 0 else 1 end
它肯定会解决你的问题。
Update table1
Set flag = Case flag
When 1 then 0
Else 1 End