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 へと変換されます。
早速試してみます。
次のSQLで「TRUE」と「FALSE」という文字列をbit型に変換します。
1 2 3 |
-- TRUE / FALSE をbit型に変換 SELECT CONVERT(BIT, 'TRUE') AS ['TRUE']; SELECT CONVERT(BIT, 'FALSE') AS ['FALSE']; |
結果は「TRUE」の場合に「1」、「FALSE」の場合に「0」が返ってきました。
「文字列値 TRUE および FALSE は bit 値に変換できます。TRUE は 1 に変換され、FALSE は 0 に変換されます。」という仕様は満たしているようです。
「TRUE / FALSE」という文字列はtinyint型やsmallint型、int型やbigint型には変換できませんので。「TRUE / FALSE」という文字列を変換できるのは便利です。
せっかくなので、色々と試してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
-- いろいろな値をbit型に変換 SELECT -- 数値 CONVERT(BIT, 0) AS [0], CONVERT(BIT, 1) AS [1], CONVERT(BIT, -1) AS [-1], CONVERT(BIT, 5) AS [5], CONVERT(BIT, -5) AS [-5], CONVERT(BIT, 11) AS [11], CONVERT(BIT, -11) AS [-11], -- TRUE / FALSE 文字列 CONVERT(BIT, 'TRUE') AS ['TRUE'], CONVERT(BIT, 'FALSE') AS ['FALSE'], CONVERT(BIT, 'true') AS ['true'], CONVERT(BIT, 'false') AS ['false'], CONVERT(BIT, 'True') AS ['True'], CONVERT(BIT, 'False') AS ['False'], -- 数字 CONVERT(BIT, '0') AS ['0'], CONVERT(BIT, '1') AS ['1'], CONVERT(BIT, '2') AS ['2'], CONVERT(BIT, '000') AS ['000'], CONVERT(BIT, '001') AS ['001'], CONVERT(BIT, '002') AS ['002'], -- 空文字列 CONVERT(BIT, '') AS [''], -- NULL CONVERT(BIT, NULL) AS [NULL] |
変換元の値 | 変換後の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型を使う選択肢を考えてもよさそうです。