wake-up-neo.net

Gibt es in SQLite ein boolesches Literal?

Ich kenne den booleancolumn-Typ, aber gibt es in SQLite ein booleanliteral? In anderen Sprachen kann dies true oder false sein. Natürlich kann ich 0 und 1 verwenden, aber ich neige dazu, so genannte magische Zahlen zu vermeiden, wo dies möglich ist.

Aus dieser Liste scheint es in anderen SQL-Implementierungen zu existieren, aber nicht in SQLite. (Ich verwende SQLite 3.6.10, was es wert ist.)

54
Benjamin Oakes

Aus Abschnitt 1.1 Boolescher Datentyp der Dokumente:

SQLite hat keine separate boolesche Speicherklasse. Boolesche Werte werden stattdessen als Ganzzahlen 0 (falsch) und 1 (wahr) gespeichert.

Es sieht also so aus, als ob Sie mit 0 und 1 festsitzen.

75
Justin Ethier

1.1 Boolescher Datentyp 

SQLite hat keine separate boolesche Speicherklasse. Boolesche Werte werden stattdessen als Ganzzahlen 0 (falsch) und 1 (wahr) gespeichert.

Docs

8
Andrey

Die Frage bezieht sich ausdrücklich nicht auf den Spaltentyp (dh speicherseitig), sondern auf die Verwendung von TRUE und FALSE Literale (dh parser-weise), die SQL-kompatibel sind wie gemäß der PostgreSQL-Schlüsselwortdokumentation (was zufällig auch SQL-92-, SQL: 2008- und SQL: 2011-Spalten in der Referenztabelle enthält).

Die SQLite-Dokumentationslisten alle unterstützten Schlüsselwörter und diese Liste enthält weder TRUE noch FALSE, daher ist SQLite in dieser Hinsicht leider nicht konform.

Sie können es auch einfach testen und sehen, wie der Parser als Spaltenname für das Token angezeigt wird:

$ 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

Gibt es ein boolesches Literal in SQLite?

Wie in Justin Ethiers Antwort angegeben, hat SQLite keinen bestimmten Datentyp für Boolean. Ab SQLite 3.23.0 unterstützt jedoch True/False-Literale:

  1. TRUE und FALSE als Konstanten erkennen. (Wenn aus Kompatibilitätsgründen Spalten mit den Namen "true" oder "false" vorhanden sind, beziehen sich die Bezeichner auf die Spalten und nicht auf boolesche Konstanten.)

  2. Unterstützungsoperatoren IS TRUE, IS FALSE, IS NOT TRUE und IS NOT FALSE. 

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

4
Lukasz Szozda

SQLite hat keinen booleschen Typ, Sie sollten INTEGER verwenden, wobei 0 falsch und 1 wahr ist

0
Tung Nguyen

Es gibt keinen booleschen Datentyp. Es gibt nur 5 Typen, die hier aufgelistet sind. Ganze Zahlen können mit verschiedenen Breiten auf der Festplatte gespeichert werden, wobei die kleinste 1 Byte ist. Dies ist jedoch ein Implementierungsdetail:

"Aber sobald INTEGER-Werte von der Festplatte und in den Speicher für die Verarbeitung von _ gelesen werden, werden sie in den allgemeinsten Datentyp konvertiert.

Angesichts dessen ist es nicht überraschend, dass es keine booleschen Literale gibt.

0