SQL Server - BIT の反転させた値を取得する方法
BIT の反転させた(反対の)値を取得する方法
BIT のデータ型に入っている値を反転させたい時ありますよね。
例えば CloseFlag という BIT 型のカラムに、その期間がクローズされたかどうかを表す値が入っていて、クライアントのプログラムではその期間がオープンかどうかをチェックボックスで表示したいような時です。
今回はそんな時に簡単に BIT の値を反転させる方法をご紹介します。
~ (ビット演算子 NOT) を使って BIT の値を反転させる
SQL Server で、BIT の値を反転させたい時には、~ (ビット演算子 NOT) が使えます。
カラム名や変数の前に ~ をつけるだけです。
BIT 型の変数に入っている 1, 0, null を反転させてみます。
DECLARE @CloseFlag1 BIT = 1, @CloseFlag2 BIT = 0, @CloseFlag3 BIT; SELECT ~@CloseFlag1 AS OpenFlag1, ~@CloseFlag2 AS OpenFlag2, ~@CloseFlag3 AS OpenFlag3;
1 と 0 の BIT の値が反転していますね。
値が NULL の時は反転させても NULL のままですので、NULL を 0 として扱いたいような時は ISNULL() などで変換する前に置き換えてください。
CASE 文を使って BIT の値を反転させる
ビット演算子のほうが簡単ですが、CASE 文を使っても、BIT の反対の値を取得することができます。
DECLARE @CloseFlag1 BIT = 1; SELECT CASE WHEN @CloseFlag1 = 1 THEN 0 ELSE 1 END AS OpenFlag1;
BIT の値は反転されていますね。この方法だと元の値が null の時は、反転した値が 1 になりますね。
あと、このやり方だと OpenFlag1 のデータ型は INT になります。
SQL_VARIANT_PROPERTY() を使って確認してみましょう。
SQL_VARIANT_PROPERTY() の使い方についてはこちらをご覧ください。「SQL Server: 値のデータ型を確認する方法」
DECLARE @CloseFlag1 BIT = 1; SELECT SQL_VARIANT_PROPERTY(~@CloseFlag1, 'BaseType'); SELECT SQL_VARIANT_PROPERTY(CASE WHEN @CloseFlag1 = 1 THEN 0 ELSE 1 END, 'BaseType');
~ (ビット演算子 NOT)で反転させたほうは bit 型ですが、0, 1 と CASE 文で数字を指定しただけのときは INT 型になっていますね。
反転した値を BIT 型で取得したい時は、BIT 型に CAST してください。
DECLARE @CloseFlag1 BIT = 1; SELECT CASE WHEN @CloseFlag1 = 1 THEN CAST(0 AS BIT) ELSE CAST(1 AS BIT) END AS OpenFlag1;
以上、SQL Server で BIT の反転させた値を取得する方法をご紹介しました。