如何在SQL Server中翻转一下?

时间:2008-10-04 23:21:25

标签: sql sql-server bit-manipulation

我正在尝试在SQL Server中执行按位NOT。我想做这样的事情:

update foo
set Sync = NOT @IsNew

注意:在我结束之前,我开始写这个并找到我自己问题的答案。我仍然想与社区分享,因为MSDN上缺少这些文档(直到我将其添加到社区内容中)。

5 个答案:

答案 0 :(得分:96)

是的,〜运算符将起作用。

update foo
set Sync = ~@IsNew

答案 1 :(得分:25)

按位NOT:〜

按位AND:&

按位OR:|

按位异或:^

答案 2 :(得分:9)

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

  

〜:对整数值执行按位逻辑NOT运算。   〜按位运算符对表达式执行按位逻辑NOT,依次取每个位。如果expression的值为0,则结果集中的位设置为1;否则,结果中的位被清除为0.换句话说,将1更改为零,将零更改为1。

答案 3 :(得分:2)

为了完整起见:

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

答案 4 :(得分:1)

〜运算符仅适用于BIT,

尝试:  〜CAST(@IsNew AS BIT)