
Zitat von
gdietrich
Hallo Leute,
ich habe folgendes Problem:
Zuerst einmal vielleicht, dass die Datentabellen noch nicht produktiv aufgebaut sind also kann hier noch das Richtige gesetzt bzw. ver�ndert werden.
Ich muss eine Produktionsdauerberechnung durchf�hren die folgende Randbedingungen enth�lt.
1. Es gibt eine Tabelle in der die aktive Produktionsdauer hinterlegt ist (z.B Startzeit 08:00 / Endzeit 22:00 ), k�nnte ich also dementsprechend als TIME Feld hinterlegen.
2. Ich kann die Produktionsdauer nicht in einem TIME Feld erfassen, da sie �ber 24 Stunden sein kann. ( z.B 30:00 h )
3. Der Planer verplant nun die Produktion anhand des Datums und einer Startzeit (z.B 02.02.2012 / 11:00 Uhr )
Und jetzt genau steh ich auf dem Schlauch da ich mir nicht im klaren bin, wie ich die Produktionsdauer so hinbiegen kann, dass ich auch mit ihr rechnen kann.
Sprich mir fehlt das Speicherformat der Produktionsdauer und die dann folgende Typumwandlung, damit ich damit auch rechnen kann.
Kann mir hier jemand einen Tip geben ?
Welche Version?
9.2 bringt RANGE-Typen, einfach geil. Da Du noch nicht produktiv bist, wäre das ja vielleicht ein Einsatzszenario für Dich.
Deine Probleme habe ich vielleicht nicht wirklich verstanden, aber hier Beipsiel mit den von Dir genannten Zahlen:
Code:
test=*# select '[2012-02-02 08:00,2012-02-02 22:00)'::tsrange;
tsrange
-----------------------------------------------
["2012-02-02 08:00:00","2012-02-02 22:00:00")
(1 row)
test=*# select lower('[2012-02-02 08:00,2012-02-02 22:00)'::tsrange) + '11hour'::interval;
?column?
---------------------
2012-02-02 19:00:00
(1 row)
test=*# select lower('[2012-02-02 08:00,2012-02-02 22:00)'::tsrange) + '30hour'::interval;
?column?
---------------------
2012-02-03 14:00:00
(1 row) Du kannst auch prüfen, ob ein RANGE-Wert in einen anderen reinpaßt, möglicherweise suchst Du sowas:
Code:
test=*# select '[2012-02-02 08:00,2012-02-03 22:00)'::tsrange - '[2012-02-02 08:00,2012-02-02 22:00)'::tsrange ;
?column?
-----------------------------------------------
["2012-02-02 22:00:00","2012-02-03 22:00:00")
(1 row) Also, die Produktion würde von heute 08Uhr bis morgen 22Uhr gehen, die Maschinenzeit ist aber nur 8-22, der Bereich von heute 22 bis morgen 22Uhr bleibt übrig, das ist:
Code:
test=*# select upper('[2012-02-02 22:00:00,2012-02-03 22:00:00)'::tsrange) - lower('[2012-02-02 22:00:00,2012-02-03 22:00:00)'::tsrange);
?column?
----------
1 day
(1 row)
Andreas
Lesezeichen