boolean
列タイプについて知っていますが、boolean
がありますSQLiteのliteral?他の言語では、これはtrue
またはfalse
になります。明らかに、0
および1
、しかし、可能な限り、いわゆる「マジックナンバー」を避ける傾向があります。
このリスト から、SQLiteではなく他のSQL実装に存在する可能性があるようです。 (SQLite 3.6.10を使用していますが、その価値はあります。)
セクションの 1.1 Boolean Datatype のドキュメントから:
SQLiteには、別個のブールストレージクラスがありません。代わりに、ブール値は整数0(false)および1(true)として保存されます。
そのため、0
および1
。
1.1ブールデータ型
SQLiteには、別個のブールストレージクラスがありません。代わりに、ブール値は整数0(false)および1(true)として保存されます。
SQLiteにブールリテラルはありますか?
Justin Ethier's answer で述べたように、SQLiteにはブール値用の特定のデータ型がありません。しかし、 SQLite 3.23. からは、true/falseリテラルをサポートしています。
TRUEおよびFALSEを定数として認識します。(互換性のために、「true」または「false」という名前の列が存在する場合、識別子はブール定数ではなく列を参照します。)
サポート演算子IS TRUE、IS FALSE、IS NOT TRUE、およびIS間違いではない。
SELECT true AS t, false AS f;
SELECT 'condition is true'
WHERE 1 IS NOT FALSE;
CREATE TABLE a (id INT, b BOOLEAN DEFAULT(TRUE));
INSERT INTO a(id) VALUES(100);
SELECT * FROM a;
-- id b
-- 100 1
問題は、列タイプ(つまりストレージ単位)ではなく、TRUE
とFALSE
の使用に関するものです。 PostgreSQLのキーワードドキュメントによる (参照テーブルにSQL-92、SQL:2008、およびSQL:2011の列も含まれる)としてSQL準拠のリテラル(つまり、パーサーごと)。
SQLiteのドキュメントには サポートされているすべてのキーワード がリストされており、このリストにはTRUE
もFALSE
も含まれていないため、残念ながらSQLiteはその点で非準拠です。
また、簡単にテストし、パーサーがトークンを列名にしたいので、どのようにbarfsを使用するかを確認することもできます。
$ sqlite3 :memory:
SQLite version 3.14.0 2016-07-26 15:17:14
sqlite> CREATE TABLE foo (booleanish INT);
sqlite> INSERT INTO foo (booleanish) VALUES (TRUE);
Error: no such column: TRUE
SQLiteにはブール型がありません。0がfalse、1がtrueのINTEGERを使用する必要があります
ブールデータ型はありません。 here の5つのタイプのみがリストされています。整数はさまざまな幅でディスクに保存できます。最小は1バイトです。ただし、これは実装の詳細です。
「しかしINTEGER値がディスクからメモリに読み込まれて処理されるとすぐに、それらは最も一般的なデータ型(8バイトの符号付き整数)に変換されます。」
それを考えると、ブールリテラルがないことは驚くことではありません。