SQL Server でビット単位の NOT を実行しようとしています。私はこのようなことをしたいと思います:
update foo
set Sync = NOT @IsNew
注:これを書き始めて、書き終える前に自分の質問に対する答えを見つけました。このドキュメントは MSDN に欠けていたので、コミュニティと共有したかったのです (MSDN のコミュニティ コンテンツにも追加するまでは)。
SQL Server でビット単位の NOT を実行しようとしています。私はこのようなことをしたいと思います:
update foo
set Sync = NOT @IsNew
注:これを書き始めて、書き終える前に自分の質問に対する答えを見つけました。このドキュメントは MSDN に欠けていたので、コミュニティと共有したかったのです (MSDN のコミュニティ コンテンツにも追加するまでは)。
はい、〜演算子は機能します。
update foo
set Sync = ~@IsNew
ビット単位の NOT: ~
ビットごとの AND: &
ビットごとの OR: |
ビット単位の XOR: ^
MSDNが不足していますか? http://msdn.microsoft.com/en-us/library/ms173468(SQL.90).aspx
〜:整数値に対してビット単位の論理NOT演算を実行します。〜ビット演算子は、式に対してビット単位の論理否定を実行し、各ビットを順番に取得します。式の値が0の場合、結果セットのビットは1に設定されます。それ以外の場合、結果のビットは値0にクリアされます。つまり、1が0に変更され、0が1に変更されます。
完全を期すために:
SELECT b, 1 - b
FROM
(SELECT cast(1 AS BIT) AS b
UNION ALL
SELECT cast(0 AS BIT) AS b) sampletable
~ 演算子は BIT でのみ機能します。
試してください: ~ CAST(@IsNew AS BIT)