Ich kann anscheinend keine zuverlässigen Ergebnisse aus der Abfrage für eine SQLite-Datenbank erhalten, wenn ich eine datetime-Zeichenfolge als Vergleich verwende:
select *
from table_1
where mydate >= '1/1/2009' and mydate <= '5/5/2009'
Wie soll ich mit Datetime-Vergleichen mit SQLite umgehen?
update: Feld mydate ist ein DateTime-Datentyp
mydate
Spalte gespeicherte Wert ? Ich vermute, es ist nicht eines der von SQLite unterstützten Formate: sqlite.org/lang_datefunc.html'2009-11-13'
ist für mydate weniger als'2009-11-13 00:00:00'
.)Datetime()
Zeitabfrage ausführen kann, muss ich das verwenden, wie es @Brad in seiner Erwähnung der Lösung angegeben hat. Ansonsten beschwert sich VS2012. Vielen Dank, Brad.Antworten:
SQLite haben nicht Datetime gewidmet Typen , aber eine hat einige Funktionen Datetime . Befolgen Sie die Zeichenfolgendarstellungsformate (eigentlich nur die Formate 1-10), die von diesen Funktionen verstanden werden (Speichern des Werts als Zeichenfolge), und verwenden Sie sie. Außerdem entspricht der lexikografische Vergleich der Zeichenfolgen dem Datum / Uhrzeit-Vergleich (sofern Sie dies nicht tun) versuchen Sie, Daten mit Zeiten oder Datenzeiten mit Zeiten zu vergleichen, was sowieso nicht viel Sinn macht).
Je nachdem, welche Sprache Sie verwenden, können Sie sogar eine automatische Konvertierung erhalten . (Dies gilt nicht für Vergleiche in SQL-Anweisungen wie im Beispiel, erleichtert Ihnen jedoch das Leben.)
quelle
date
unddatetime
date
(oderdatetime
) in der Spalte, die intern als behandelt wirdtext
. Das passt zu meinen Bedürfnissen.Um dieses Problem zu lösen, speichere ich Daten als
YYYYMMDD
. So,where mydate >= '20090101' and mydate <= '20050505'
Es funktioniert einfach die ganze Zeit. Möglicherweise müssen Sie nur einen Parser schreiben, um zu behandeln, wie Benutzer ihre Daten eingeben können, damit Sie sie in konvertieren können
YYYYMMDD
.quelle
Ich hatte kürzlich das gleiche Problem und habe es folgendermaßen gelöst:
quelle
strftime
in einer WHERE-Klausel wie in diesem Beispiel und habe eine Frage: Ist es effizient,strftime
diese zu verwenden? Wird es einmal für jede Zeile oder einmal pro Abfrage ausgewertet?Folgendes funktioniert für mich mit SQLite einwandfrei:
quelle
Sqlite kann nicht auf Daten vergleichen. Wir müssen in Sekunden konvertieren und es als Ganzzahl umwandeln.
Beispiel
quelle
Das Folgende hat bei mir funktioniert.
quelle
Ich habe eine Situation, in der ich Daten von vor bis zu zwei Tagen und bis zum Ende des heutigen Tages haben möchte. Ich kam zu folgendem.
Ok, technisch gesehen ziehe ich morgen auch Mitternacht ein, wie das Originalplakat, wenn es irgendwelche Daten gab, aber meine Daten sind alle historisch.
Das Wichtigste ist, dass das erste Poster alle Daten nach dem 15.11.2009 um 00:00:00 Uhr ausschloss. Daten, die am 15. um Mitternacht aufgezeichnet wurden, wurden berücksichtigt , Daten nach Mitternacht am 15. jedoch nicht. Wenn ihre Anfrage war,
Verwendung der Zwischenklausel zur Klarheit.
Es wäre etwas besser gewesen. Schaltsekunden, in denen eine Stunde tatsächlich mehr als 60 Sekunden haben kann, werden immer noch nicht berücksichtigt, aber gut genug für Diskussionen hier :)
quelle
Ich musste die Zeit mit den darin enthaltenen Zeitzoneninformationen speichern und konnte Abfragen mit dem folgenden Format ausführen:
Die Zeit wird in der Datenbank als regulärer TEXT im folgenden Format gespeichert:
quelle
Nachfolgend finden Sie die Methoden zum Vergleichen der Daten. Zuvor müssen Sie jedoch das Format des in der Datenbank gespeicherten Datums ermitteln
Ich habe Daten im Format MM / TT / JJJJ HH: MM gespeichert, daher muss es in diesem Format verglichen werden
Die folgende Abfrage vergleicht die Konvertierung des Datums in das Format MM / TT / JJJJ und ruft Daten von den letzten fünf Tagen bis heute ab. ZWISCHEN Operator hilft und Sie können einfach Startdatum UND Enddatum angeben.
Die folgende Abfrage wird größer als der Operator (>) verwenden.
Ich habe nur die aktuelle Uhrzeit berechnet. Sie können das Format und das Datum nach Bedarf ändern.
Hoffe das wird dir helfen
Summiert
quelle
Sie können auch Ihre eigenen Benutzerfunktionen erstellen , um Datumsangaben in dem von Ihnen gewählten Format zu verarbeiten. SQLite hat eine ziemlich einfache Methode zum Schreiben eigener Benutzerfunktionen. Zum Beispiel habe ich einige geschrieben, um die Zeitdauer zu addieren.
quelle
Meine Anfrage habe ich wie folgt gemacht:
Ich habe den Hinweis von @ ifredys Antwort erhalten. Ich wollte nur, dass diese Abfrage unter iOS mit Objective-C ausgeführt wird. Und es funktioniert!
Hoffe, dass jemand, der iOS-Entwicklung macht, auch von dieser Antwort Gebrauch machen wird!
quelle
Im Moment entwickle ich mit dem System.Data.SQlite NuGet-Paket (Version 1.0.109.2). Welche mit SQLite Version 3.24.0.
Und das funktioniert bei mir.
Ich kann die Funktion datetime () nicht verwenden. Möglicherweise haben sie die SQL-Abfrage für diese SQLite-Version bereits aktualisiert.
quelle