如何在SQL Server中翻转一个比特?

88

我想在SQL Server中执行按位取反操作。我想要做的事情类似于这样:

update foo
set Sync = NOT @IsNew

注意:我开始写这篇文章时,在完成之前就找到了自己问题的答案。尽管如此,我仍想与社区分享,因为MSDN文档中缺少这一部分内容(直到我也将其添加到社区内容中)。


我想我读错了...本来想告诉你在SQL Server中不能掉头...:P - Codewerks
1
另一篇文章:http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/how-to-flip-a-bit-in-sql-server-by-using - Even Mien
5个回答

130

是的,~ 运算符可以起作用。

update foo
set Sync = ~@IsNew

35

按位取反运算符: ~

按位与运算符: &

按位或运算符: |

按位异或运算符: ^


12

MSDN缺少资料?http://msdn.microsoft.com/en-us/library/ms173468(SQL.90).aspx

~:对整数值进行按位逻辑非操作。 ~按位运算符对表达式执行按位逻辑非操作,依次处理每个比特位。如果 expression 的值为 0,则结果集中的位被设置为 1;否则,结果中的比特位将被清除为 0。换句话说,1 变成了 0,0 变成了 1。


唉。我刚才看了一下按位运算符和~一元运算符 :) - Even Mien

2

~ 运算符仅适用于 BIT 类型,

尝试: ~ CAST(@IsNew AS BIT)


2

为了完整起见:

SELECT b, 1 - b
FROM
  (SELECT cast(1 AS BIT) AS b
   UNION ALL
   SELECT cast(0 AS BIT) AS b) sampletable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接