Bil*_*ous 67 sql t-sql sql-server
我正在尝试使用更新查询在SQL Server中翻转一个字段,也就是说,我想将所有0都变为1,反之亦然.什么是最优雅的解决方案?
在T-SQL中似乎没有按位NOT运算符(除非我遗漏了一些明显的东西)并且我无法找到执行更新的任何其他方法.
Aus*_*nen 114
你不需要按位 - 不要为此 - 只需将其与1/true进行异或.
检查一下:
select idColumn, bitFieldY, bitFieldY ^ 1 as Toggled
from tableX
Run Code Online (Sandbox Code Playgroud)
更新:
update tableX
set bitFieldY = bitFieldY ^ 1
where ...
Run Code Online (Sandbox Code Playgroud)
Leo*_*uza 25
另一种方式是
DECLARE @thebit bit = 1, @theflipbit bit
SET @theflipbit = ~ @thebit
SELECT @theflipbit
Run Code Online (Sandbox Code Playgroud)
其中"〜"表示"NOT"运算符.它很干净,你可以得到一个很好的代码来阅读."否定一点"甚至更清洁,它完全符合"NOT"运算符的设计目标.
May*_*ayo 12
UPDATE tblTest SET MyBitField = CASE WHEN MyBitField = 1 THEN 0 ELSE 1 END
Run Code Online (Sandbox Code Playgroud)
这很平淡,但每个人都会理解它在做什么.
编辑:
您可能还需要按照注释中的建议考虑空值.当然取决于你的需求.
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
Run Code Online (Sandbox Code Playgroud)
一个简单的按位NOT运算符(〜)在SQL Server 2014 - 12.0.2269.0中为我工作
在你的T-SQL里面的update子句中 -
Update TableName
SET [bitColumnName] = ~[bitColumnName],
....
WHERE ....
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
参考 - https://docs.microsoft.com/en-us/sql/t-sql/language-elements/bitwise-not-transact-sql
| 归档时间: |
|
| 查看次数: |
34916 次 |
| 最近记录: |