Вопрос

Я пытаюсь выполнить побитовое НЕ в SQL Server. Я хотел бы сделать что-то вроде этого:

update foo
set Sync = NOT @IsNew

Примечание: я начал писать это и узнал ответ на свой вопрос еще до того, как закончил. Я все еще хотел поделиться с сообществом, так как этот фрагмент документации отсутствовал в MSDN (пока я тоже не добавил его в Содержимое сообщества).

Это было полезно?

Решение

Да, оператор ~ будет работать.

update foo
set Sync = ~@IsNew

Другие советы

Побитовое НЕ: ~

Побитовое И: & amp;

Побитовое ИЛИ: |

Побитовый XOR: ^

Не хватает MSDN? http://msdn.microsoft.com/en-us /library/ms173468(SQL.90).aspx

  

~: выполняет побитовую логическую операцию NOT над целочисленным значением.   Побитовый оператор выполняет побитовое логическое НЕ для выражения, принимая каждый бит по очереди. Если выражение имеет значение 0, биты в наборе результатов устанавливаются в 1; в противном случае бит в результате очищается до значения 0. Другими словами, единицы меняются на нули, а нули - на единицы.

Ради полноты:

SELECT b, 1 - b
FROM
  (SELECT cast(1 AS BIT) AS b
   UNION ALL
   SELECT cast(0 AS BIT) AS b) sampletable
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top