Zeit berechnen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

flux
Beiträge: 3
Registriert: Fr, 25.07.2008 08:08
Wohnort: in der nähe von Bad Segeberg

Zeit berechnen

Beitrag von flux »

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
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zeit berechnen

Beitrag von Barlee »

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

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]"
Gruß Barlee
flux
Beiträge: 3
Registriert: Fr, 25.07.2008 08:08
Wohnort: in der nähe von Bad Segeberg

Re: Zeit berechnen

Beitrag von flux »

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 ! :D


Gruß

Olli
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zeit berechnen

Beitrag von Barlee »

Hallo flux,

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]"
Gruß Barlee
flux
Beiträge: 3
Registriert: Fr, 25.07.2008 08:08
Wohnort: in der nähe von Bad Segeberg

Re: Zeit berechnen

Beitrag von flux »

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
Bencard
Beiträge: 2
Registriert: Mo, 06.07.2009 22:26

Re: Zeit berechnen

Beitrag von Bencard »

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
Bencard
Beiträge: 2
Registriert: Mo, 06.07.2009 22:26

Re: Zeit berechnen

Beitrag von Bencard »

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
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zeit berechnen

Beitrag von Barlee »

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:

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]"
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
Antworten