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型を使う選択肢を考えてもよさそうです。