Zeitunterschied berechnen - FAQ-Base

From The Document Foundation Wiki
< Faq‎ | Base‎ | 120
Jump to: navigation, search

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:

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.