MySQLにあるようなMicrosoft SQL Serverにブールデータ型がありますか?
もしそうなら、MS SQL Serverの代替は何ですか?
BIT
データ型を使ってブールデータを表すことができます。 BIT
フィールドの値は、1,0またはnullです。
BIT
データ型を使用することをお勧めします。おそらく設定はNOT NULL
のようになります。
ビット(Transact-SQL)
1、0、またはNULLの値を取ることができる整数データ型。
SQL Serverデータベースエンジンは、ビット列の格納を最適化します。テーブルに8以下のビット列がある場合、列は1バイトとして格納されます。 9から最大16ビットの列がある場合、列は2バイトとして格納されます。
文字列値TRUEとFALSEはビット値に変換できます。TRUEは1に変換され、FALSEは0に変換されます。
bit
を探しています。 1または0(またはNULL
)を格納します。あるいは、文字列'true'
と'false'
を1や0の代わりに使うこともできます。
declare @b1 bit = 'false'
print @b1 --prints 0
declare @b2 bit = 'true'
print @b2 --prints 1
また、0以外の値(正または負)は1に評価されます(場合によっては1に変換されます)。
declare @i int = -42
print cast(@i as bit) --will print 1, because @i is not 0
true
はfalse
データ型の可能な値なので、SQL Serverは3つの値を持つロジック(NULL
、NULL
、およびbit
)を使用します。これが関連する真理値表です -
3値論理に関する詳細情報
http://www.firstsql.com/idefend3.htm
https://www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valued-logic/
SQL Serverにはブールデータ型があります。その値は、TRUE
、FALSE
、またはUNKNOWN
です。ただし、ブールデータ型は、 比較演算子 (=
、<>
、<
、>=
など)または 論理演算子 (AND
など)の組み合わせを含むブール式の結果のみです。 、OR
、IN
、EXISTS
)。ブール式は、 WHERE
句、 HAVING
句、 WHEN
expression のCASE
句、または IF
または WHILE
フロー制御ステートメント。
テーブル内の列のデータ型を含む他のすべての用途では、ブール値は許可されません。これらの他の用途では、 BIT
データ型が推奨されます。 0
列制約またはINTEGER
制約でさらに制限されていない限り、値1
、NOT NULL
、およびNULL
のみを許可する、絞り込まれたCHECK
のように動作します。
ブール式でBIT
列を使用するには、=
、<>
、IS NULL
などの比較演算子を使用して比較する必要があります。例えば.
SELECT
a.answer_body
FROM answers AS a
WHERE a.is_accepted = 0;
フォーマットの観点から、bit
値は通常、クライアントソフトウェアでは0
または1
として表示されます。よりユーザーフレンドリーなフォーマットが必要で、データベースの前のアプリケーション層で処理できない場合、CASE
式を使用して「ジャストインタイム」に変換できます。
SELECT
a.answer_body,
CASE a.is_accepted WHEN 1 THEN 'TRUE' ELSE 'FALSE' END AS is_accepted
FROM answers AS a;
ブール値をchar(1)
やvarchar(5)
などの文字データ型として保存することもできますが、それはあまり明確ではなく、ストレージ/ネットワークのオーバーヘッドが多く、不正な値を制限するには各列にCHECK
制約が必要です。
参考として、answers
テーブルのスキーマは次のようになります。
CREATE TABLE answers (
...,
answer_body nvarchar(MAX) NOT NULL,
is_accepted bit NOT NULL DEFAULT (0)
);
SQL ServerでBit
DataTypeを使用してブールデータを格納できます。
Bit
データ型を使用してください。ネイティブT-SQLで扱う場合、値1と0があります。
SQL ServerはBit
データ型を使用します
BITデータ型を使用できます。 0、1、またはnullのいずれかです。特にTRUEまたはFALSEが必要な場合は、enumを使用して0と1をTrueとFalseに変換できます。そしてそれを文字列として渡します。
BIT
を介してSQL Serverにブール値を格納するためにTINYINT(1)
データ型を使用するのは非常に効果的です。