Dies ist sehr ähnlich zu another question, die als keine echte Frage geschlossen wurde. Ich habe versucht, es zu bearbeiten, um es für die Wiedereröffnung gültig zu machen, aber es wurde mir gesagt, dass es besser wäre, eine neue Frage zu stellen.So speichern Sie Datetime in SQLite
Ich entwickle auf Android und muss datetime Werte in einer SQLite-Datenbank speichern, um wiederkehrende Ereignisse zu verfolgen, die Benachrichtigungen erzeugen. Ich muss auch in der Lage sein, die Datenbank basierend auf Zeitbereichen abzufragen.
Die SQLite documentation besagt, dass es keine besonderen Datumstypen unterstützt aber Termine können mit Text, REAL oder INTEGER-Typen dargestellt werden:
TEXT als ISO8601 Zeichenketten ("YYYY-MM-DD HH: MM : SS.SSS ").
REAL wie Julian Tag Zahlen, die Anzahl der Tage seit Mittag in Greenwich am 24. November, 4714 B.C. nach dem proleptischen Gregorianischen Kalender.
INTEGER als Unix-Zeit, die Anzahl der Sekunden seit 1970-01-01 00:00:00 UTC.
Die Vorteile jedem zunächst scheinen zu sein:
- TEXT mit der Fähigkeit, in der Datenbank zur besseren Lesbarkeit nützlich direkt später angezeigt werden (keine Transformation erforderlich), aber teuer, wenn Berechnungen ausgeführt werden müssen Sie. Führt möglichen Fehler aus Zeitzonen ein.
- REAL nützlich für Daten vor 1970, gut für Berechnungen oder Datumsvergleiche. Stellt keine Uhrzeit, nur Tage dar.
- INTEGER nützlich für Berechnungen oder Datetime-Vergleiche, sehr gute Kompatibilität, da es ein weit verbreiteter Standard ist.
Klingt das richtig? Würde die Verwendung eines INTEGERS für Datumsangaben die Abfrage von Zeitbereichen merklich beschleunigen, als wenn TEXT verwendet würde? Sonst habe ich noch nicht darüber nachgedacht?
In Anbetracht meines Anwendungsfalls, welche dieser Lösungen wäre am besten?
Welche Art von Daten erwarten Sie (Hunderte, Tausende, Millionen von Datensätzen)? SQLite soll eine kleine db sein, und so ist alles über ein paar hundert Datensätze übertrieben. Ich würde vorschlagen, dass Sie Text verwenden, um Datumswerte zu speichern. Nur wenn Sie eine Notwendigkeit dafür sehen (Sie müssen die Datetime auf Tausenden von Datensätzen berechnen), dann ändern Sie die zugrunde liegenden Daten der Datetime zu einem Real oder Int. –
Höchstens die Anzahl der Datensätze wäre in den unteren Hunderten. Ich denke, das bedeutet, dass Leistung kein Problem ist, aber Text scheint Vergleiche zu erschweren, und ich mache mir Sorgen über den Fehler, den die Sommerzeit einbringen könnte. – Matthew