Hallo zusammen.
Ich habe eine Frage zu einem SQLite-Statement.
Es soll eine Zeitdifferenz aus Spalte-1 (Zeitdarstellung: hh:mm:ss,
Datentyp: DATE) einer Tabelle und einer Spalte-2 (Zeitdarstellung:
hh:mm:ss, Datentyp: DATE) berechnet werden.
Mit der Funktion strftime() habe ich mit folgendem Befehl die
Zeitdifferenz in Sekunden von Spalte-2 und Spalte-1 berechnet:
> (strftime('%s',Spalte1) - strftime('%s',Spalte2)
Dies liefert aber wiegesagt nur die Sekunden zurück und nicht die
gewünschte Darstellung im Format "hh:mm:ss".
Könnt ihr mir helfen, wie ich die Ausgabe im entsprechenden Format
(hh:mm:ss) bekomme?
Vielen Dank!
Hallo, Versuchsmal mit einer anderen Formatierung : ... strftime('%H:%M:%S', ... Gruss Andreasgf
Hallo Andreas,
das funktioniert anscheinend nicht bei SQLite.
Habe es aufgrund deines Vorschlags ausprobiert:
>strftime('%H:%M:%S', Spalte_2) - strftime('%H:%M:%S', Spalte_1)
Einen Datentyp DATE gibt es nicht; siehe http://www.sqlite.org/datatype3.html. Du musst die Zeiten zuerst in Zahlen umwandeln, um die Differenz berechnen zu können, und erst dann wieder in einen String mit dem gewünschten Format: time(strftime('%s', x) - strftime('%s', y), 'unixepoch')
:
Bearbeitet durch User
Hallo Clemens,
>Du musst die Zeiten zuerst in Zahlen umwandeln
Die Zeitdifferenz liegt mir als ganzzahliger Wert (in Sekunden) vor.
Ich habe nun versucht, die Differenz zu ermitteln, in dem ich jeweils
die Zeitdifferenz der Stunden und jeweils die Zeitdifferenz der Minuten
in einzelne Spalten der DB-Tabelle zu schreiben.
Dies versuchte ich durch:
1 | UPDATE Tabelle SET Diff_Stunden = (strftime('%H', Spalte_2) - strftime('%H', Spalte_1)) WHERE Datum=DATE('now'); |
2 | |
3 | UPDATE Tabelle SET Diff_Minuten = (strftime('%M', Spalte_2) - strftime('%M', Spalte_1)) WHERE Datum=DATE('now'); |
Dies funktioniert aber auch nicht. Habe ich nämlich in Spalte_1 beispielsweise "11:38" und in Spalte_2 "13:28" stehen, bekomme ich folgende Ausgabe: > Diff_Stunden: 2 > Diff_Minuten: -10 Richtig wäre ja: > Diff_Stunden: 1 > Diff_Minuten: 50 Warum berechnet mir SQLite die Differenz der Minuten mit einem negativ-Wert? Es ist zwar verständlich, wenn man weiß, was mit "-10" gemeint ist, aber leserlich ist das nicht wirklich... Ich weiß leider nicht mehr weiter. Könnt ihr helfen? Danke!
Harald K. schrieb: > Ich habe nun versucht, die Differenz zu ermitteln, in dem ich jeweils > die Zeitdifferenz der Stunden und jeweils die Zeitdifferenz der Minuten > in einzelne Spalten der DB-Tabelle zu schreiben. Warum? Welches Problem versuchst du damit zu lösen? > Warum berechnet mir SQLite die Differenz der Minuten mit einem > negativ-Wert? Weil 28 - 38 = -10. Die Differenz zwischen zwei Zeitstempeln kannst du nur ingesamt berechenen, und darfst das Ergebnis erst danach wieder in H/M/S umwandeln.
Nun habe ich noch versucht, mittels "IF-Anweisung" (die in SQLite "CASE" heißt) eine Abfrage zu machen, ob der Wert der Minuten negativ sei. Ist er dies, so soll die Arbeit_Stunden um 1 dekrementiert werden und die Arbeit_Minuten den Wert von 60+Arbeit_Minuten sein. Funktioniert leider auch nicht:
1 | SELECT Arbeit_Stunden, Arbeit_Minuten FROM Tabelle |
2 | CASE |
3 | WHEN (Arbeit_Minuten < 0) THEN ( Arbeit_Stunden-1) |
4 | WHEN (Arbeit_Minuten < 0) THEN ( 60+Arbeit_Minuten) |
5 | END; |
>Warum? Welches Problem versuchst du damit zu lösen?
Es geht "einfach" nur darum, aus zwei Spalten eine Zeitdifferenz von
Stunden und Minuten in eine andere Spalte der Tabelle zu schreiben:
+----------------------------------------------------------------------+
Spalte_1 | Spalte_2 | Diff
|
------------------------------------------------------------------------
08:12 | 11:22 | <hier soll "03:10" reingeschrieben werden
|
12:09 | 14:08 | <hier soll "01:59" reingeschrieben werden
|
------------------------------------------------------------------------
Die Lösung hat Clemens bereits gepostet : Clemens L. schrieb: > time(strftime('%s', x) - strftime('%s', y), 'unixepoch') Update Tabelle Set Diff=time(strftime('%s', Spalte_2) - strftime('%s', Spalte_1), 'unixepoch'); ggf. solltest du die Spalte Diff als Type Time definieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.