私はSQL Serverでいくつかのデータを変換しています:
INSERT INTO MYTABLE (AllowEdit)
(Select PreventEdit from SOURCETABLE)
ソーステーブルのビット値を逆にする必要があります。 NOT
が機能することを期待していました。これはコードで行う方法ですが、機能しません。私が考えることができる最もエレガントな方法は次のとおりです。
INSERT INTO MYTABLE (AllowEdit)
(Select ABS(PreventEdit -1) from SOURCETABLE)
もっと標準的な方法はありますか?
私はこれを自分でテストしませんでしたが、 ビットごとの否定演算子 、~
少し:
INSERT INTO MYTABLE (AllowEdit)
(SELECT ~PreventEdit FROM SourceTable)
NOTまたはXOR ifビット
SELECT ~PreventEdit FROM SourceTable
SELECT 1 ^ PreventEdit FROM SourceTable
SourceTableに実際に含まれていない場合は、次のようにします。
SELECT 1 - PreventEdit FROM SourceTable
編集:テスト、NOTは2の補数ではないため、ビット列で使用しないと奇妙な結果になる可能性があることに注意してください
DECLARE @bitvalue bit = 1, @intvalue int = 1;
SELECT ~@bitvalue, ~@intvalue
SELECT 1 ^ @bitvalue, 1 ^ @intvalue
SELECT 1 - @bitvalue, 1 - @intvalue
SELECT @bitvalue = 0, @intvalue = 0
SELECT ~@bitvalue, ~@intvalue
SELECT 1 ^ @bitvalue, 1 ^ @intvalue
SELECT 1 - @bitvalue, 1 - @intvalue