Hallo zusammen,
ich antworte zusammenfassend auf beide Nachrichten (vielen Dank dafür!), da es sich teils überschneidet:
Backend: PostgreSQL mit JDBC-Konnector.
Beide Zeitfelder sind Typ TIME, versuchsweise auch Typ TIMEtz (Fehler time zone s.u.).
Ich brauche die Dauer = Ende - Beginn (ohne Datum, da immer nur am gleichen Tag, kein Überschreiten der Mitternacht) in einem Bericht. Auch darin kann ich die Berechnung nicht ohne Fehlermeldung lösen.
In dem (gruppierten) Bericht brauche ich dann auch noch die Summe der Dauern je Gruppe und die Gesamtsumme über Dauer.
Mach' doch einmal ein Beispiel, bei dem das auch nachvollziehbar ist. Handelt es sich um die Zeiten 11:00 Uhr und 12:15 Uhr? Soll also 01:15 oder 75 raus kommen, korrekt?
Ja, 01:15 wäre ideal! Oder auch 0,05208333 = 01/24 + 15/24/60 bzw. für Gerhards Zeitangabe (04:58:01) 0,206956018519 = 04/24 + 58/24/60 + 01/24/60/60.
nachdem du ja PostgreSQL verwendest, habe ich in der dortigen Doku nachgesehen, da gibt es die Funktion TIMEDIFF nicht;
Stimmt, ich hatte es trotzdem ausprobiert ...
soweit ich das verstehe, wird das Minuszeichen verwendet, die Beispiele sind leider durchgängig nur mit Konstanten ausgeführt. Daraufhin habe ich die Subtraktion von TIME-Feldern mal in MariaDB ausprobiert, das geht auch, liefert aber ein zumindest gewöhnungsbedürftiges Ergebnis, s.u.
Versuche auf jeden Fall mal, was direkt mit der Datenbank funktioniert, du hast ja ein Tool für den Zugriff auf PostgreSQL, dessen Namen ich gerade nicht auswendig weiß (aber er steht irgendwo!), und probiere dann erst in Base.
Das Minuszeichen liefert mit einer Dbeaver-Abfrage mit den Feldtypen TIME das korrekte Ergebnis 01:15. Diese Abfrage in BASE gibt <OBJECT>.
Das Minuszeichen in einer Dbeaver-Abfrage mit den Feldtypen TIMETZ ergibt den
SQL-Fehler [42883]: ERROR: operator does not exis ...
Ich vermute, dass dein Problem mit dem in deiner Antwort unten genannten Beispiel darin besteht, dass du zusätzlich zu der Subtraktion auch noch TIMEDIFF drin hast, denn die Fehlermeldung bezieht sich ja darauf (du hättest erst einmal bei PostgreSQL schauen sollen, ob die Funktion dort auch existiert bzw. genauso heißt); der Teil davor scheint ja wohl nicht beanstandet zu werden, die Prüfung geht ja normalerweise von links nach rechts.
Lass mal die Zeile mit Timediff weg.
Erledigt! Komisch ist, dass mit den Funktionen DATEDIFF (auch mit DATUM + ENDE - DATUM - BEGINN) oder der Funktion AGE der Fehler
ERROR 42883: function DATEDIFF / AGE (time without time zone) does not exist. You might ...
Ich habe dann noch versucht, die TIME-Strings zu zerlegen in der Art:
SELECT split_part("Beginn", ':', 2) as S2 FROM ...
auch hier:
SQL-Fehler [42883]: ERROR: function split_part(time without time zone, unknown, integer) does not exist
Hinweis: No function matches the given name and argument types. You might need to add explicit type casts.
Zusammengefasst:
* Minus-Zeichen
o OK in DBeaver mit Feldtyp TIME (nicht TIMETZ!),
o <OBJECT>-Fehler in BASE.
* DATEDIFF oder AGE oder SPLIT schon in DBeaver ERROR 42883 time zone.
Danke!
Michael