2016-11-30 6 views
1

Ich vergleiche die Zeit in Android SQLite-Datenbank, hier ist meine Tabellenstruktur in den Screenshots. Eigentlich habe ich zweimal, wie 8:00 und 7:30 (im Grunde sind das Mitarbeiter Schichtzeiten) in der Zeichenfolge und ich habe eine Spalte c_TIME in meiner Datenbank und ich möchte alle Datensätze, die in b/w mein zwei Mal ie liegt (8:00 und 7:30) von c_TIME.Android sqlite Zeit vergleichen Problem

Ich habe diese Abfrage verwendet, aber es funktioniert nicht, mit mir bitte jemand führen, was ich falsch

SELECT * 
FROM ATTENDANCE 
WHERE strftime('%H','08:00') > strftime('%H', c_TIME) AND 
     time('08:00') < strftime('%H', c_TIME) AND 
     STATE = 'IN' 

enter image description here

+0

Die obige Abfrage reruns 0 Datensätze – Achin

Antwort

0

Die folgenden sollte funktionieren tue:

SELECT * 
FROM ATTENDANCE 
WHERE strftime('%H:%M:%S', c_date) > '07:30:00' AND 
     strftime('%H:%M:%S', c_date) < '08:00:00' AND 
     STATE = 'IN' 

Kommentare :

Anstatt das Feld c_TIME zu verwenden, sollten Sie c_date verwenden. Tatsächlich sehe ich keinen Wert darin, um eine Spalte herum zu bleiben, die die Zeit getrennt speichert.

strftime gibt eine Zeichenfolge basierend auf einer Art von datetime/timestamp-Eingabe zurück. Die Ausgabe von strftime('%H:%M:%S', c_date) sollte die Form HH:MM:SS haben, und diese Zeichenfolge kann lexikographisch gegen 08:00:00 und 07:30:00 verglichen werden. Der Vergleich sollte noch funktionieren, denn für gleich lange Strings sollte er immer noch numerisch sortieren.

+0

diese Rückkehr 0 Datensätze – Achin

+0

@Achin anzeigen Sind Sie sicher, dass Sie auch alle Daten, die zurückgegeben werden sollen ? Die gleiche Tabelle in Ihrer Frage enthält keine übereinstimmenden Daten. –

+0

Ja, ich habe 3 Werte in c_date 2016-11-30 09:18:19, 2016-11-25 09:18:19 und 2016-11-26 06:30:00 und das liegt b/w '07: 30 : 00 'und '08: 00: 00' – Achin

0

Versuchen:

select * from ATTENDANCE where c_date between 'yyyy-mm-dd' and 'yyyy-mm-dd'; 

Statt C_TIME zu verwenden, verwenden C_DATE Feld.

Sie können das Datumsformat in der Abfrage entsprechend ändern, um Daten zwischen zwei bestimmten Zeiten abzurufen.

SQLite unterstützt folgende Formate:

YYYY-MM-DD 

YYYY-MM-DD HH:MM 

YYYY-MM-DD HH:MM:SS 

YYYY-MM-DD HH:MM:SS.SSS 

YYYY-MM-DDTHH:MM 

YYYY-MM-DDTHH:MM:SS 

YYYY-MM-DDTHH:MM:SS.SSS 

HH:MM 

HH:MM:SS 

HH:MM:SS.SSS 

now 

DDDDDDDDDD 

here