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;

SQL Server - BIT の反転させた値を取得する方法 1

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;

SQL Server - BIT の反転させた値を取得する方法 2

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');

SQL Server - BIT の反転させた値を取得する方法 3

~ (ビット演算子 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 の反転させた値を取得する方法をご紹介しました。

© 2010-2024 SQL Server 入門