Frequently asked questions - Base

    From The Document Foundation Wiki
    < Faq‎ | Base
    This page is a translated version of the page Faq/Base/120 and the translation is 73% complete.
    Outdated translations are marked like this.


    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.