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
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.