88

I'm trying to perform a bitwise NOT in SQL Server. I'd like to do something like this:

update foo
set Sync = NOT @IsNew

Note: I started writing this and found out the answer to my own question before I finished. I still wanted to share with the community, since this piece of documentation was lacking on MSDN (until I added it to the Community Content there, too).

Even Mien
  • 44,393
  • 43
  • 115
  • 119
  • I read this wrong I think...was gonna tell you that you can't make a Uturn in SQL Server...:P – Codewerks Oct 05 '08 at 00:07
  • 1
    Another article: http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/how-to-flip-a-bit-in-sql-server-by-using – Even Mien Sep 29 '10 at 19:23

5 Answers5

130

Yes, the ~ operator will work.

update foo
set Sync = ~@IsNew
Jason Kresowaty
  • 16,105
  • 9
  • 57
  • 84
35

Bitwise NOT: ~

Bitwise AND: &

Bitwise OR: |

Bitwise XOR: ^

Even Mien
  • 44,393
  • 43
  • 115
  • 119
12

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

~: Performs a bitwise logical NOT operation on an integer value. The ~ bitwise operator performs a bitwise logical NOT for the expression, taking each bit in turn. If expression has a value of 0, the bits in the result set are set to 1; otherwise, the bit in the result is cleared to a value of 0. In other words, ones are changed to zeros and zeros are changed to ones.

Bellash
  • 7,560
  • 6
  • 53
  • 86
Blorgbeard
  • 101,031
  • 48
  • 228
  • 272
2

For the sake of completeness:

SELECT b, 1 - b
FROM
  (SELECT cast(1 AS BIT) AS b
   UNION ALL
   SELECT cast(0 AS BIT) AS b) sampletable
Oliver
  • 3,225
  • 1
  • 18
  • 12
2

~ operator will work only with BIT,

try: ~ CAST(@IsNew AS BIT)

vitik
  • 21
  • 3