如何在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))