web-dev-qa-db-ja.com

SQL Serverで少しフリップするにはどうすればよいですか?

SQL Serverでビット単位のNOTを実行しようとしています。私はこのようなことをしたいと思います:

update foo
set Sync = NOT @IsNew

注:これを書き始め、終了する前に自分の質問に対する答えを見つけました。このドキュメントはMSDNに欠けていたので(コミュニティコンテンツに追加するまで)、コミュニティと共有したかったのです。

66
Even Mien

はい、〜演算子は機能します。

update foo
set Sync = ~@IsNew
99
Jason Kresowaty

ビットごとのNOT:〜

ビットごとのAND:&

ビットごとのOR:|

ビットごとのXOR:^

26
Even Mien

MSDNが不足していますか? http://msdn.Microsoft.com/en-us/library/ms173468(SQL.90).aspx

〜:整数値に対してビットごとの論理NOT演算を実行します。 〜ビットごとの演算子は、式に対してビットごとの論理否定を実行し、各ビットを順番に取得します。 expressionの値が0の場合、結果セットのビットは1に設定されます。それ以外の場合、結果のビットは値0にクリアされます。つまり、1はゼロに変更され、0は1に変更されます。

10
Blorgbeard

完全を期すために:

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

〜演算子はBITでのみ機能し、

試してください:〜CAST(@IsNew AS BIT)

1
vitik