2010-12-23 4 views
1

Das ist einfach, aber ich kann es nicht aus der SQLite FAQ und Vignette für ALTER TABLE herausfinden.Eine julianische Datumsspalte zu einer SQLite Tabelle hinzufügen

Ich habe eine Datumsspalte, aber um einen Zeitunterschied zu finden, muss ich julianische Daten verwenden, also habe ich das Gefühl, dass ich genauso gut eine julianische Datumsspalte hinzufügen könnte, weil ich das viel machen werde. Aber ich kann nicht herausfinden, wie es geht.

Ich habe eine Reihe von Iterationen durchlaufen, aber ich glaube nicht, dass ich mit der SQLite-Philosophie der ALTER TABLE und INSERT INTO Befehle klicke. Vielen Dank!

Antwort

1

Aber ich habe keine Ahnung, wie man permanent eine Spalte einer Tabelle hinzufügen, die eine Funktion anderer Spalten in dieser Tabelle ist. Ist das nicht üblich?

Sie können keine berechnete Spalte in einer SQLite-Tabelle hinzufügen. Aber Sie können das mit einem VIEW tun.

CREATE TABLE TableWithDates (
    ID INTEGER PRIMARY KEY, 
    Iso8601 TEXT 
); 

CREATE VIEW ViewWithDates AS 
    SELECT ID, Iso8601, JULIANDAY(Iso8601) AS Julian 
    FROM TableWithDates; 

sqlite> INSERT INTO TableWithDates VALUES (1, CURRENT_TIMESTAMP); 
sqlite> SELECT * FROM TableWithDates; 
1|2010-12-23 21:13:26 
sqlite> SELECT * FROM ViewWithDates; 
1|2010-12-23 21:13:26|2455554.3843287 
+0

danke! Ich sah VIEW in meinem Buch, wusste aber nicht, dass es die einzige Option war (das Hinzufügen einer Spalte scheint so einfach zu sein). Ist das skalierbar? Ich habe 4 Millionen Zeilen. Sollten Sie die Tabelle zum Hinzufügen durchgehen und die Tischrahmen fallen lassen? Das schien mit 36 ​​Spalten auch ein Problem zu sein. –

+0

Ja, es ist skalierbar. 'CREATE VIEW' benötigt O (1) Zeit. Es führt keine Berechnungen durch, bis Sie "AUSWÄHLEN" aus der "ANSICHT" wählen. – dan04

+0

Aber mit jeder Auswahl berechnet es dann? Es ist also bequemer, aber hilft es mir nicht, einen Wert nur einmal zu berechnen? –

1

In Sqlite gibt es keine DATE- oder TIME-Typen. Sie können frei wählen, was für Sie sinnvoll ist. Wenn es nur Zeitstempel für die Protokollierung oder etwas ist, sollte STRING in Ordnung sein. Wenn du Datetime-Vergleiche und Mathe machst (was du der Frage entsprechend bist), wäre INTEGER am besten.

This page diskes eingebaute Funktionen für den Einsatz. Wenn Sie INTEGER verwenden, um Sekunden seit der Epoche zu speichern, können Sie die Subtraktion verwenden, um eine Zeitdifferenz zu finden.

+0

Ich bin OK mit den Datums- und Uhrzeitfunktionen in SQLite. Mein Buch erklärt das ziemlich gut. Aber ich habe keine Idee, wie man eine Spalte dauerhaft zu einer Tabelle hinzufügt, die eine Funktion anderer Spalten in dieser Tabelle ist. Ist das nicht üblich? –