sqlite
Datentypen
Suche…
Bemerkungen
Offizielle Dokumentation: Datentypen in SQLite Version 3
TYPEOF-Funktion
sqlite> SELECT TYPEOF(NULL);
null
sqlite> SELECT TYPEOF(42);
integer
sqlite> SELECT TYPEOF(3.141592653589793);
real
sqlite> SELECT TYPEOF('Hello, world!');
text
sqlite> SELECT TYPEOF(X'0123456789ABCDEF');
blob
Boolean verwenden
Für Booleans verwendet SQLite die Ganzzahlen 0 und 1 :
sqlite> SELECT 2 + 2 = 4;
1
sqlite> SELECT 'a' = 'b';
0
sqlite> SELECT typeof('a' = 'b');
integer
> CREATE TABLE Users ( Name, IsAdmin );
> INSERT INTO Users VALUES ('root', 1);
> INSERT INTO Users VALUES ('john', 0);
> SELECT Name FROM Users WHERE IsAdmin;
root
Erzwingen von Spaltentypen
SQLite verwendet dynamische Typisierung und ignoriert deklarierte Spaltentypen:
> CREATE TABLE Test (
Col1 INTEGER,
Col2 VARCHAR(2), -- length is ignored, too
Col3 BLOB,
Col4, -- no type required
Col5 FLUFFY BUNNIES -- use whatever you want
);
> INSERT INTO Test VALUES (1, 1, 1, 1, 1);
> INSERT INTO Test VALUES ('xxx', 'xxx', 'xxx', 'xxx', 'xxx');
> SELECT * FROM Test;
1 1 1 1 1
xxx xxx xxx xxx xxx
(Deklarierte Spaltentypen werden jedoch für die Typaffinität verwendet .)
Zur Erzwingung von Typen müssen Sie eine Einschränkung mit der Funktion typeof () hinzufügen:
CREATE TABLE Tab (
Col1 TEXT CHECK (typeof(Col1) = 'text' AND length(Col1) <= 10),
[...]
);
(Wenn eine solche Spalte NULL-fähig sein soll, müssen Sie explizit 'null' zulassen.)
Datums- / Zeittypen
SQLite hat keinen separaten Datentyp für Datums- oder Zeitwerte.
ISO8601-Zeichenketten
Die integrierten Schlüsselwörter CURRENT_DATE , CURRENT_TIME und CURRENT_TIMESTAMP geben Strings im ISO8601-Format zurück:
> SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
------------ ------------ -------------------
2016-07-08 12:34:56 2016-07-08 12:34:56
Solche Werte werden auch von allen eingebauten Datums- / Zeitfunktionen verstanden :
> SELECT strftime('%Y', '2016-07-08');
2016
Julianische Tageszahlen
Die eingebauten Datums- / Uhrzeitfunktionen interpretieren Zahlen als Julianische Tage :
> SELECT datetime(2457578.02425926);
2016-07-08 12:34:56
Die julianday() -Funktion konvertiert jeden unterstützten Datums- / Zeitwert in eine julianische julianday() :
> SELECT julianday('2016-07-08 12:34:56');
2457578.02425926
Unix-Zeitstempel
Die integrierten Datums- / unixepoch können Zahlen mit dem unixepoch Modifikator als Unix-Zeitstempel unixepoch :
> SELECT datetime(0, 'unixepoch');
1970-01-01 00:00:00
Die Funktion strftime() kann jeden unterstützten Datums- / Zeitwert in einen Unix-Zeitstempel konvertieren:
> SELECT strftime('%s', '2016-07-08 12:34:56');
1467981296
nicht unterstützte Formate
Es wäre möglich, Datums- / Uhrzeitwerte in einem anderen Format in der Datenbank zu speichern, aber die integrierten Datums- / Uhrzeitfunktionen werden diese nicht analysieren und NULL zurückgeben:
> SELECT time('1:30:00'); -- not two digits
> SELECT datetime('8 Jul 2016');