Zeit berechnen
Moderator: Moderatoren
Zeit berechnen
Moin Moin erstmal!
Ich habe ein Problem mit meiner ersten unter Base erstellten Datenbank. Die Datenbank erfasst alle Segelflugpiloten unseres Vereins, die längere Strecken geflogen sind. Die Datenbank selber habe ich ganz vernünftig hinbekommen, nur bei der Abfrage stellt sich jetzt folgendes Problem: Ich habe eine Startzeit und eine Landezeit, ich möchte aber auch eine Flugzeit ausgeben bzw. berechnen lassen. Die beiden Werte sind vom Typ Time. Ich habe mit DATEDIFF('mi',"Start","Landung") as "Flugzeit" bereits eine Flugzeit in Minuten berechnet, möchte diese aber in Stunden und Minuten ausgegeben haben. Ich habe schon überlegt mit MOD zu arbeiten, habe den Befehl aber bei HSQLDB nicht gefunden.Hat jemand eine Idee ?
Gruß
Olli
Ich habe ein Problem mit meiner ersten unter Base erstellten Datenbank. Die Datenbank erfasst alle Segelflugpiloten unseres Vereins, die längere Strecken geflogen sind. Die Datenbank selber habe ich ganz vernünftig hinbekommen, nur bei der Abfrage stellt sich jetzt folgendes Problem: Ich habe eine Startzeit und eine Landezeit, ich möchte aber auch eine Flugzeit ausgeben bzw. berechnen lassen. Die beiden Werte sind vom Typ Time. Ich habe mit DATEDIFF('mi',"Start","Landung") as "Flugzeit" bereits eine Flugzeit in Minuten berechnet, möchte diese aber in Stunden und Minuten ausgegeben haben. Ich habe schon überlegt mit MOD zu arbeiten, habe den Befehl aber bei HSQLDB nicht gefunden.Hat jemand eine Idee ?
Gruß
Olli
Re: Zeit berechnen
Hallo flux,
probier mal folgendes unter Extras/SQL (es gilt Zeit1 =Abflugzeit, Zeit2 =Ankunftszeit). Ausgegeben werden:
-Gesamtflugzeit im Format hh:mm
-separat Stunden und Minuten
Gruß Barlee
probier mal folgendes unter Extras/SQL (es gilt Zeit1 =Abflugzeit, Zeit2 =Ankunftszeit). Ausgegeben werden:
-Gesamtflugzeit im Format hh:mm
-separat Stunden und Minuten
Code: Alles auswählen
SELECT
CONCAT( DATEDIFF( 'hh', "Zeit1", "Zeit2" ), CONCAT( ':', DATEDIFF( 'mi', "Zeit1", "Zeit2" ) - ( DATEDIFF( 'hh', "Zeit1", "Zeit2" ) * 60 ) ) ) AS "Flugzeit",
DATEDIFF( 'hh', "Zeit1", "Zeit2" ) AS "Stunden",
DATEDIFF( 'mi', "Zeit1", "Zeit2" ) - ( DATEDIFF( 'hh', "Zeit1", "Zeit2" ) * 60 ) AS "Minuten"
FROM
"[Deine_Tabelle]"
Re: Zeit berechnen
Hallo Barlee!
Erstmal vielen Dank für deine Hilfe !!!
Deine Lösung habe ich auch sofort ausprobiert . Funktioniert bis auf einige Minutenausgaben im Minus: 4:-36
auch super ! Den Befehl CONCAT kannte ich gar nicht,da arbeite ich mich aber ein. Wenn ich noch fragen habe, weiß ich ja wo ich schreiben muss !
Gruß
Olli
Erstmal vielen Dank für deine Hilfe !!!
Deine Lösung habe ich auch sofort ausprobiert . Funktioniert bis auf einige Minutenausgaben im Minus: 4:-36
auch super ! Den Befehl CONCAT kannte ich gar nicht,da arbeite ich mich aber ein. Wenn ich noch fragen habe, weiß ich ja wo ich schreiben muss !

Gruß
Olli
Re: Zeit berechnen
Hallo flux,
hier nun mit korrekter Zeitdarstellung und ohne Minuswerte:
Unter "Bearbeiten" muss "SQL Kommando direkt ausführen" aktiviert sein!
Gruß Barlee
hier nun mit korrekter Zeitdarstellung und ohne Minuswerte:
Unter "Bearbeiten" muss "SQL Kommando direkt ausführen" aktiviert sein!
Code: Alles auswählen
SELECT
"Zeit1",
"Zeit2",
CONCAT(
CASE WHEN
(extract(MINUTE from "Zeit1") <= extract(MINUTE from "Zeit2") )
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )-1
END
, CONCAT( ':', datediff( 'mi', "Zeit1", "Zeit2" ) - ( CASE WHEN extract(MINUTE from "Zeit1") <= extract(MINUTE from "Zeit2")
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )-1 END ) * 60 ) ) AS "Flugzeit",
CASE WHEN
(extract(MINUTE from "Zeit1") <= extract(MINUTE from "Zeit2") )
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )-1
END AS "Stunden",
datediff( 'mi', "Zeit1", "Zeit2" ) - ( CASE WHEN extract(MINUTE from "Zeit1") <= extract(MINUTE from "Zeit2")
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )-1 END ) * 60 "Minuten"
FROM
"[DEINE_TABELLE]"
Re: Zeit berechnen
Hallo Barlee!
Dein Code funktioniert jetzt einwandfrei !!! Er ist für mich leider nicht einfacher geworden, aber das macht nichts. Wichtig ist, das er funktioniert, durch die Funktionsweise beiss ich mich schon durch.
Vielen Dank,
Gruß Olli
Dein Code funktioniert jetzt einwandfrei !!! Er ist für mich leider nicht einfacher geworden, aber das macht nichts. Wichtig ist, das er funktioniert, durch die Funktionsweise beiss ich mich schon durch.
Vielen Dank,
Gruß Olli
Re: Zeit berechnen
Gast hat geschrieben:Freundliches Hallo in das OpenOffice Forum.
das mit der Zeitberechnung beschäftigt mich nun auch schon ne weile,der obige code funktioniert sehr gut,nur möchte ich noch eine "Zeit" abziehen.Erstelle gerade eine Datenbank um Arbeitszeit zu erfassen und da muss ich halt die Pausen abziehen,krieg das aber einfach nicht hin.Kann mir da jemand helfen ?
viele grüße
ein Openoffice Neuling
Re: Zeit berechnen
Bencard hat geschrieben:Gast hat geschrieben:Freundliches Hallo in das OpenOffice Forum.
das mit der Zeitberechnung beschäftigt mich nun auch schon ne weile,der obige code funktioniert sehr gut,nur möchte ich noch eine "Zeit" abziehen.Erstelle gerade eine Datenbank um Arbeitszeit zu erfassen und da muss ich halt die Pausen abziehen,krieg das aber einfach nicht hin.Kann mir da jemand helfen ?
viele grüße
ein Openoffice Neuling
sorry für das doppel moppel
Re: Zeit berechnen
Hallo Bencard,
Im Vergleich zur bestehenden Abfrage, die ja Zeiten addiert, sollte man das dadurch erreichen, dass die Vergleichsoperatoren umgekehrt werden. Auch ist ggf. eine 1 zur Stundendifferenz zu addieren (wenn Minutenzahl von Zeit2 >Minutenzahl von Zeit1)
Also:
Das Beispiel zieht "Zeit2" von "Zeit1" ab. Sekunden bleiben unberücksichtigt.
... am einfachsten wäre es allerdings, bei solchen Aufgabenstellungen ein DB-System zu benutzen, das vergleichbare Funktionen bereitstellt
Gruß Barlee
Im Vergleich zur bestehenden Abfrage, die ja Zeiten addiert, sollte man das dadurch erreichen, dass die Vergleichsoperatoren umgekehrt werden. Auch ist ggf. eine 1 zur Stundendifferenz zu addieren (wenn Minutenzahl von Zeit2 >Minutenzahl von Zeit1)
Also:
Code: Alles auswählen
SELECT
"Zeit1",
"Zeit2",
ABS(
CASE WHEN (extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2") )
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1
END
) AS "Stunden",
ABS(
datediff( 'mi', "Zeit1", "Zeit2" ) -
(CASE WHEN extract(MINUTE from "Zeit1") >=extract(MINUTE from "Zeit2")
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1 END ) * 60
) AS "Minuten",
CAST(
CAST(
ABS(CASE WHEN
(extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2") )
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1
END)
AS INTEGER) ||':'||
CAST(
ABS(datediff( 'mi', "Zeit1", "Zeit2" ) -
(CASE WHEN extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2")
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1 END ) * 60)
AS INTEGER)||':00'
AS TIME) AS "Zeit_neu"
FROM
"[Tabelle]"
... am einfachsten wäre es allerdings, bei solchen Aufgabenstellungen ein DB-System zu benutzen, das vergleichbare Funktionen bereitstellt
Gruß Barlee