2017-09-20 1 views
0

Ich versuche, letzten 31 Tage Daten aus SQLLite db, unter Verwendung von SQL zu ziehen. Ich habe bereits google gesucht und verschiedene Optionen ausprobiert, während alle SQL funktioniert, ich bekomme keine Ergebnisse wie erwartet. Zum Beispiel in folgenden Screenshot sehen Sie, i Datensatz tun haben auf 18-Sep aber SQL liefert keine Ergebnisse ... Ich bin nicht sicher, was ich hier fehlt ..Android SQLLite letzten 31 Tage Daten aus current_timestamp Spalte

SELECT * FROM transactions WHERE TIMESTAMP > (SELECT DATETIME('now', '-30 day')) 

enter image description here

+0

Haben Sie Zeitstempel in der Datenbank gespeichert? Wenn ja, dann einfach den aktuellen Datums- und Zeitstempel und minus 31 Tage davon abstecken und mit dem gespeicherten Zeitstempel vergleichen wie bei der SQL Abfrage –

+0

Probiere diese Abfrage 'SELECT * FROM Transaktionen WHERE Datum BETWEEN datetime ('now', '-31 days') UND datetime ('jetzt', 'localtime') ' –

+0

Upendra habe ich versucht, dass kein Glück, wie ich sagte, ich versuchte alle diese Optionen, aber etwas ist fischig, weshalb ich keine Aufzeichnung bekomme. Obwohl es bereits eine gibt ... – Akshay

Antwort

2

verwenden Sie zwischen anstelle von Timestamp-Vergleich direkt -

SELECT * FROM transactions WHERE TIMESTAMP BETWEEN datetime('now', '-31 days') AND datetime('now', 'localtime') 

Dies liegt daran, SQLlite speichert in String-Format stammt und nicht ein Standard-Datums- und Uhrzeitformat hat. So würde der direkte Vergleich von String fehlschlagen. Daher hilft die Verwendung der Datetime-Funktion, um Daten mit vorhandenen Werten zu vergleichen.

+0

habe ich das auch versucht, aber es zieht keine Aufzeichnung. Wie Sie im Screenshot sehen, habe ich 1 Datensatzvergleich, aber es wird nicht gezogen, wenn ich diesen SQl ausführe. – Akshay

+0

@Akshay dort ist nichts fischig. Es ist nur Ihr Zeitstempelformat. SWL Lite unterstützt kein MMM-Type-Format. Ändern Sie es in MM-Typ, so dass Ihr Monat numerisch sein sollte. Überprüfen Sie dies für weitere Formate - https://www.sqlite.org/lang_datefunc.html –

+0

Danke Kapil, ich habe Problem gefunden ... Das Problem hier ist meine Spalte fügen Sie die current_timestamp jedes Mal, wenn Datensatz erstellt wird, aber durch dedefualt ID hatte nicht beliebiger Datentyp Nach dem Erstellen des Datentyps konnte ich sehen, dass alles SQL funktionierte ... Was ich mich wundere, wie SQLLite diese Tabelle erstellt hat, wenn ich keinen Datentyp für diese Spalte hatte. Ich dachte, es sollte mir einen Fehler geben ... – Akshay

Verwandte Themen