如何在T-SQL中翻转位字段?
我试图使用更新查询来翻转SQL Server中的一个位域,也就是说,我想把所有的0都设为1,反之亦然。 什么是最优雅的解决scheme?
在T-SQL中似乎没有一个按位的NOT运算符(除非我遗漏了一些明显的东西),而且我还找不到任何其他执行更新的方式。
你不需要一点点 – 不是这个 – 只是异或1 /真。
要检查它:
select idColumn, bitFieldY, bitFieldY ^ 1 as Toggled from tableX
更新:
update tableX set bitFieldY = bitFieldY ^ 1 where ...
MSDN T-SQL异或(^)
为什么不是一个简单的bitfield = 1 - bitfield
?
另一种方法是
DECLARE @thebit bit = 1, @theflipbit bit SET @theflipbit = ~ @thebit SELECT @theflipbit
其中“〜”表示“不”操作符。 它很干净,你有一个很好的代码来阅读。 “否定位”甚至更干净,它确实是“NOT”操作符的devise。
我非常肯定,大多数SQL风格有一个位不,所以我检查, 似乎在TSQL似乎是一个 。
从文档,这是字符~
。
UPDATE tblTest SET MyBitField = CASE WHEN MyBitField = 1 THEN 0 ELSE 1 END
这是平淡的,但每个人都会明白它在做什么。
编辑:
您可能还需要按照评论中的build议说明空值。 取决于你的要求当然。
UPDATE tblTest SET MyBitField = CASE WHEN MyBitField = 1 THEN 0 WHEN MyBitField = 0 THEN 1 ELSE NULL -- or 1 or 0 depending on requirements END
一个简单的按位运算符(〜)在SQL Server 2014 – 12.0.2269.0中为我工作
在T-SQL里面的update子句中 –
Update TableName SET [bitColumnName] = ~[bitColumnName], .... WHERE ....
希望这可以帮助
参考 – https://docs.microsoft.com/en-us/sql/t-sql/language-elements/bitwise-not-transact-sql
你试过这个吗?
UPDATE mytable SET somecolumn = CASE WHEN somecolumn = 0 THEN 1 WHEN somecolumn IS NULL THEN NULL WHEN somecolumn = 1 THEN 0 END
查询(vb)
x = "select x from table"
更新(vb)
"update table set x=" Not(x*(1))