SQLServerでboolean型(True/Falseの真偽値)を扱うbit型

SQLServerで真偽値を扱うためのデータ型について紹介します。

SQLServerにはtrueまたはfalseの真偽値を保持するためのboolean型やbool型やという名前の型はありません。
しかし、SQLServerにはbit型という型があり、真偽値を扱う場合は、そのbit型を使用します。

bit型

bit型は、1、0、または NULL の値をとる整数型です。

Microsoftのドキュメントページには、bit型の変換の仕様について、以下のように記載されています。

文字列値 TRUE および FALSE は bit 値に変換できます。TRUE は 1 に変換され、FALSE は 0 に変換されます。

bit 型への変換において、0 以外の値はすべて 1 へと変換されます。

出典: bit (Transact-SQL)

早速試してみます。
次のSQLで「TRUE」と「FALSE」という文字列をbit型に変換します。

実行結果

TRUEとFALSEをbit型に変換する

結果は「TRUE」の場合に「1」、「FALSE」の場合に「0」が返ってきました。

「文字列値 TRUE および FALSE は bit 値に変換できます。TRUE は 1 に変換され、FALSE は 0 に変換されます。」という仕様は満たしているようです。
「TRUE / FALSE」という文字列はtinyint型やsmallint型、int型やbigint型には変換できませんので。「TRUE / FALSE」という文字列を変換できるのは便利です。

せっかくなので、色々と試してみます。

実行結果
変換元の値 変換後のbit値
数値
0 0
1 1
-1 1
5 1
-5 1
11 1
-11 1
TRUE / FALSE 文字列
‘TRUE’ 1
‘FALSE’ 0
‘true’ 1
‘false’ 0
‘True’ 1
‘False’ 0
数字
‘0’ 0
‘1’ 1
‘2’ 1
‘000’ 0
‘001’ 1
‘002’ 1
空文字列
0
NULL
NULL NULL

数値の場合は「0」以外の場合はすべて「1」に変換されます。
TRUE / FALSE 文字列は大文字と小文字の区別なく「TRUE」が「1」「FALSE」が「0」に変換されます。
数字の場合は数値に暗黙に変換して「0」以外の場合はすべて「1」に変換されます。
空文字列「”」の場合は「0」になります。
NULLはNULLのまま返ってきます。

boolean型をSQLServerで扱うためのbit型についてご紹介しました。
今までは深く考えずに真偽値の「1」と「0」をint型の列に格納してきました。
「1」または「0」をデータベースに保持する場合にはint型、smallint型、tyniing型も使えますが、せっかく用意されているのですからbit型を使う選択肢を考えてもよさそうです。