Frequently asked questions - Base
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Spende
Wie kann ein Zeitunterschied berechnet werden?
Eine Tabelle hat zwei Zeitangaben: Startzeit und Zielzeit. Die Zeitdifferenz soll berechnet werden.
SELECT "Startzeit", "Zielzeit", CAST('00:00:'||DATEDIFF('ss',"Startzeit", "Zielzeit") AS TIME) AS "Zeitdifferenz" FROM "Zeitmessung"
Hier wird mit dem Trick gearbeitet, dass die HSQLDB auch Zeitangaben umwandeln kann, die von der Textdarstellung her keine Zeitangaben mehr wären. So ergibt die erste Zeitdifferenz erst einmal über die Verbindung von
'00:00:'||DATEDIFF('ss',"Startzeit", "Zielzeit")
den Text
00:00:3397
der anschließend anstandslos in eine korrekte Zeit von 56 Minuten und 31 Sekunden umgewandelt wird.
Startzeit | Zielzeit | Zeitdifferenz |
---|---|---|
12:13:34 | 13:10:11 | 00:56:37 |
12:01:23 | 14:08:13 | 02:06:50 |
Leider funktioniert die Darstellung der Zeit in einer Abfrage nur dann korrekt, wenn die Spalte nach Durchführung der Abfrage auf die entsprechende Formatierung umgewandelt wird. Dieses Problem stellt sich in Formularen und Berichten nicht, da dort die Formatierung dauerhaft gespeichert wird. Soll anschließend nicht mehr mit der Zeitdifferenz gerechnet werden, so kann die Zeitdifferenz in einen Text mit der korrekten Schreibweise umgewandelt werden:
To get the result in time format, use the function TO_CHAR to format it.
SELECT "Startzeit", "Zielzeit", TO_CHAR(CAST('00:00:'||DATEDIFF('ss',"Startzeit", "Zielzeit") AS TIME), 'HH:MI:SS') AS "Zeitdifferenz" FROM "Zeitmessung"
Mit der Firebird-Datenbank lässt sich dieses Problem wesentlich eleganter lösen:
SELECT "Startzeit", "Zielzeit", "Zielzeit" - "Startzeit" AS "Zeitdifferenz" FROM "Zeitmessung"
Firebird hat mit der Funktion DATEADD den Vorteil, dass es viele verschiedene Additions und Subtraktionsverfahren für Datums- und Zeitwerte kennt.