BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Berechnungen mit Feldern vom Typ "Zeit"

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Nikolaus
Beiträge: 2
Registriert: Mi 5. Dez 2018, 21:08

Berechnungen mit Feldern vom Typ "Zeit"

Beitrag von Nikolaus » Mi 5. Dez 2018, 21:19

Hallo,
jetzt suche ich schon eine ganze Weile und finde keine Antwort...
Problem: zum Berechnen einer Sonderwertung bei einer Sportveranstaltung muss ich Felder vom Typ "zeit" (oder noch besser "VARCHAR" - dann brauche ich nicht erst nach einem Cut&Paste-Import von einer Website den Datentyp ändern) mit einem Faktor multiplizieren, was in Calc ohne weiteres funktioniert. In Base funktioniert das nicht. Ich kann in einer Abfrage z.B. nicht ein Feld namens "Zeit1" mit " ...AS "Zeit"*2... " hinzufügen.
Welchen Trick gibt es, das trotzdem zu tun?
LG
Ingo

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Berechnungen mit Feldern vom Typ "Zeit"

Beitrag von RobertG » Do 6. Dez 2018, 20:30

Hallo Ingo,

mit Textfeldern kannst Du nicht rechnen. Da sind Datenbanken deutlich stringenter als Tabellenkalkulationen.
Zeiten kannst Du nicht multiplizieren, weil die z.B. bei der internen Datenbank als String wahrgenommen werden. Die Doppelpunkte dazwischen stören. Du müsstest also Stunden, Minuten und Sekunden voneinander trennen und umrechnen. So etwas geht über den folgenden Zugang:

Code: Alles auswählen

SELECT CAST(LEFT("Zeit",2) AS INTEGER) AS "Stunden", 
CAST(SUBSTRING("Zeit",4,2) AS INTEGER) AS "Minuten", 
CAST(RIGHT("Zeit",2) AS INTEGER) AS "Sekunden" FROM "Zeiten"
Jetzt könntest Du die Stunden mit 3600 und die Minuten mit 60 multiplizieren sowie alles addieren, dann hast Du die Zeit in Sekunden:

Code: Alles auswählen

SELECT CAST(LEFT("Zeit",2) AS INTEGER)*3600 + 
CAST(SUBSTRING("Zeit",4,2) AS INTEGER) * 60 + 
CAST(RIGHT("Zeit",2) AS INTEGER) AS "Sekunden" FROM "Zeiten"
Und wenn Du das jetzt multiplizieren willst, dann geht das durch eine Klammerung natürlich auch noch. Ich würde aber diese Umrechnung in eine Unterabfrage oder eine Ansicht packen, so dass Du nur die Integerwerte zu Gesicht bekommst.

Code: Alles auswählen

SELECT "Sekunden"*3 FROM (SELECT CAST(LEFT("Zeit",2) AS INTEGER)*3600 + 
CAST(SUBSTRING("Zeit",4,2) AS INTEGER) * 60 + 
CAST(RIGHT("Zeit",2) AS INTEGER) AS "Sekunden" FROM "Zeiten")
Leider kannst Du diese Zeiten nicht mehr sinnvoll anzeigen. Dazu musst Du die Zeit als Bruchteil eines Tages berechnen:

Code: Alles auswählen

SELECT "Tage" * 3 FROM (SELECT CAST(LEFT("Zeit",2) AS INTEGER) / 24.00000000 + 
CAST(SUBSTRING("Zeit",4,2) AS INTEGER) /1440.00000000 + 
CAST(RIGHT("Zeit",2) AS INTEGER) / 86400.00000000 AS "Tage" FROM "Zeiten")
Die vielen Nullen sind notwendig, damit nicht so schnell Rundungsfehler auftauchen. Sie machen aus den Integer-Werten dann auch Dezimalwerte. Formatierst Du die Spalte anschließend als Zeit, dann wird die korrekte Uhrzeit angegeben.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Nikolaus
Beiträge: 2
Registriert: Mi 5. Dez 2018, 21:08

Re: Berechnungen mit Feldern vom Typ "Zeit"

Beitrag von Nikolaus » Sa 8. Dez 2018, 12:29

Hallo Robert,
vielen Dank für die super-ausführliche Antwort!!
Ich werde erst über Weihnachten wieder dazu kommen, mich darum zu kümmern. Wenn was nicht klappt, frage ich dann nochmal nach.

Viele Grüße
Ingo

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten