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