web-dev-qa-db-ja.com

SQLiteにブールリテラルはありますか?

boolean列タイプについて知っていますが、booleanがありますSQLiteのliteral?他の言語では、これはtrueまたはfalseになります。明らかに、0および1、しかし、可能な限り、いわゆる「マジックナンバー」を避ける傾向があります。

このリスト から、SQLiteではなく他のSQL実装に存在する可能性があるようです。 (SQLite 3.6.10を使用していますが、その価値はあります。)

57
Benjamin Oakes

セクションの 1.1 Boolean Datatype のドキュメントから:

SQLiteには、別個のブールストレージクラスがありません。代わりに、ブール値は整数0(false)および1(true)として保存されます。

そのため、0および1

77
Justin Ethier

1.1ブールデータ型

SQLiteには、別個のブールストレージクラスがありません。代わりに、ブール値は整数0(false)および1(true)として保存されます。

Docs

8
Andrey

SQLiteにブールリテラルはありますか?

Justin Ethier's answer で述べたように、SQLiteにはブール値用の特定のデータ型がありません。しかし、 SQLite 3.23. からは、true/falseリテラルをサポートしています。

  1. TRUEおよびFALSEを定数として認識します。(互換性のために、「true」または「false」という名前の列が存在する場合、識別子はブール定数ではなく列を参照します。)

  2. サポート演算子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

dbfiddle.com demo

7
Lukasz Szozda

問題は、列タイプ(つまりストレージ単位)ではなく、TRUEFALSEの使用に関するものです。 PostgreSQLのキーワードドキュメントによる (参照テーブルにSQL-92、SQL:2008、およびSQL:2011の列も含まれる)としてSQL準拠のリテラル(つまり、パーサーごと)。

SQLiteのドキュメントには サポートされているすべてのキーワード がリストされており、このリストにはTRUEFALSEも含まれていないため、残念ながら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
6
Lloeki

SQLiteにはブール型がありません。0がfalse、1がtrueのINTEGERを使用する必要があります

0
Tung Nguyen

ブールデータ型はありません。 here の5つのタイプのみがリストされています。整数はさまざまな幅でディスクに保存できます。最小は1バイトです。ただし、これは実装の詳細です。

「しかしINTEGER値がディスクからメモリに読み込まれて処理されるとすぐに、それらは最も一般的なデータ型(8バイトの符号付き整数)に変換されます。」

それを考えると、ブールリテラルがないことは驚くことではありません。

0