Ist es in einer SQLite-Datenbank möglich, eine Tabelle mit einer Zeitstempelspalte zu erstellen, die standardmäßig verwendet wird DATETIME('now')
?
So was:
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t TIMESTAMP DEFAULT DATETIME('now')
);
Dies gibt einen Fehler ... Wie zu beheben?
nach dr. Hipp in einem aktuellen Listenbeitrag:
quelle
CURRENT_TIMESTAMP
also habe ich meine eigene Funktion in C erstellt, um die Anzahl der Mikrosekunden seit der Epoche zurückzugeben, und ich bin froh, dass ich dasDEFAULT
jetzt verwenden kann.Es ist nur ein Syntaxfehler, Sie benötigen Klammern:
(DATETIME('now'))
Wenn Sie sich die Dokumentation ansehen , werden Sie die Klammern beachten, die in der Syntax um die Option 'expr' hinzugefügt werden.
quelle
Dies ist ein vollständiges Beispiel, das auf den anderen Antworten und Kommentaren zur Frage basiert. Im Beispiel wird der Zeitstempel (
created_at
-column) als UTC-Zeitzone der Unix-Epoche gespeichert und nur bei Bedarf in die lokale Zeitzone konvertiert.Die Verwendung der Unix-Epoche spart Speicherplatz - 4 Byte Ganzzahl vs. 24 Byte Zeichenfolge bei Speicherung als ISO8601-Zeichenfolge, siehe Datentypen . Wenn 4 Bytes nicht ausreichen, kann dies auf 6 oder 8 Bytes erhöht werden.
Durch das Speichern des Zeitstempels in der UTC-Zeitzone ist es bequem, in mehreren Zeitzonen einen angemessenen Wert anzuzeigen.
Die SQLite-Version 3.8.6 wird mit Ubuntu LTS 14.04 ausgeliefert.
Die Ortszeit ist korrekt, da ich mich zum Zeitpunkt der Abfrage um UTC + 2 DST befinde.
quelle
Es ist möglicherweise besser, den Typ REAL zu verwenden, um Speicherplatz zu sparen.
Zitat aus Abschnitt 1.2 der Datentypen in SQLite Version 3
siehe Spaltenbeschränkung .
Und fügen Sie eine Zeile ohne jeden Wert bereitstellt.
quelle
integer(n)
wo man den passenden Wert für wählen kannn
.Es handelt sich um einen Syntaxfehler, da Sie keine Klammern geschrieben haben
wenn du schreibst
(Datum / Uhrzeit ('jetzt', 'Ortszeit'))
quelle
In diesem alternativen Beispiel wird die Ortszeit als Ganzzahl gespeichert, um die 20 Bytes zu speichern. Die Arbeit wird in den Feldern Standard, Update-Trigger und Ansicht ausgeführt. strftime muss '% s' (einfache Anführungszeichen) verwenden, da "% s" (doppelte Anführungszeichen) einen Fehler 'Nicht konstant' auf mich geworfen hat.
quelle