Rechnen mit Datumswerten

Hi zusammen,

ich bin gerade dabei eine Produktionsdatenbank uaf postgreSQL umzustellen und habe folgendes Problem:
In einer Tabelle stehen Produktinszeiten für Artikel und in einer Übersicht soll ausgegeben werden, wann die Artikel fertig produziert wären, ab dem heutigen Datum.
Als Formel geschrieben: Datum + (Menge*Zeit) ==> Ausgabe

in meiner bisherigen Datenbank ging das relativ einfach:
Select @now() + (Menge * ba_zykzeit/1440), … FROM SYSADM.BA

(In ba_zykzeit steht die Produktionszeit in Minuten)

Mein erster Versuch in der Postgre war folgendes:
Select current_timestamp + (Menge * ba_zykzeit/1440) FROM SYSADM.BA

Aber da kommt nur die Menldung :
ERROR: operator does not exist: timestamp with time zone + numeric

Das Beispiel in der Doku habe ich gesehen, die arbeiten dort aber nur mit Konstanten Werten, z.B. Select current_timestamp + '5 day’
oder so was, aber wie mache ich das mit variablen Werten aus einer Tabelle.

Vielen Dank für die Hilfe

JSpatz

Hallo,

wahrscheinlich solltest du die Zykluszeit in einen Zeitwert umwandeln.

Bsp.: SELECT time ‘1:30:00’*2;

Sollte dir das nicht helfen erkläre bitte die Formel und deren Datentypen näher.

mfg
Andreas

HI,

anscheinend war die Erklärung zu ungenau:

Also in der Datenbank steht in einem Feld die Zahl der Minuten als Integerwert

In der alten DB (Gupta SQL-Base) kann man mit Datumswerten einfach rechnen:

Datum + 1 = Ein Tag dazu
Datum + 10 = Zehn Tage dazu
Datum - 1 = Ein Tag zurück
Datum + (1/24) ) = Eine Stunde vor
Datum + (1/1440) = Eine Minute vor (2460=1440)
Datum + (X
(1/1440)) = X Minuten vor

Usw.

Die Formel sollte lauten:
Datumswert[Timestamp] + (Menge[Int] * Zeit[Int] / 1440)[ergibt Tage] = Datumswert[Timestamp]

Gruss JSpatz

Wie wäre es denn mit folgendem?

SELECT now() + (5 * time’10:00:00’/1440);

Gib bitte eine relevantes Beispiel und mögliche Werte für den “Zeit[Int]” Wert an.

Hallo JSpatz,

das funktioniert in PostgreSQL nicht so. Schau Dir mal Kapitel 9.9. ‘Date/Time Functions and Operators’ in der Doku an. Da sind auch Beispiele aufgeführt. Manchmal ist es auch notwendig einen Typ zu CASTEN!



mfg

fristo

Danke,

ich glaube jetzt hab ich’s kapiert

SELECT now() + (5 * time’00:01:00’)

liefert genau das gesuchte Ergebnis.
Ich gebe dem Operator praktisch vor, dass die Fünf ein Wert in Minuten ‘00:01:00’ oder Sekunden ‘00:00:01’ oder Stunden ‘01:00:00’ ist oder ?

Ist schon eine ganz andere Denke, aber man muss sich halt umgewöhnen.

Danke vielmals

JSpatz