Datumsfelder subtrahieren

TheManWho

Mitglied
Datumsfelder subtrahieren (Oracle 9.i)

Servus miteinander!
Ich habe folgende SQL-Abfrage:
Code:
ALTER session SET nls_date_format='dd.mm.yy hh24:mi:ss';
SELECT oh_name as Name, ah_date2 as Beginn, ah_date4 as Ende
 FROM ah, oh
 WHERE (oh.oh_idnr = ah.ah_idnr_bearb) and ah_date1 >= '01-Okt-2004' AND ah_date1 <= '02-Okt-2004'
 ORDER BY ah_date2;
Als zusätzliche Information soll nun die Differenz von Ende und Beginn - also die Dauer gebildet werden. Wie kann ich das berechnen? Das Ergebnis der obigen query sieht etwa so aus:

OBJEKTNAME BEGINN ENDE
---------------------------------------------------------------------------------------------------------
PingPong 01.10.04 12:21:59 01.10.04 12:22:29

Muchas gracias

/tmw
 
Zuletzt bearbeitet:
Hallo,
soweit ich weiß. gibt es DateDiff(x,y). bei Oracle nicht.

select ..., ah_date4 - ah_date2 as Differenz

wobei die Differenz in Tagen (dezimal) angegeben wird.

select sysdate-trunc(sysdate) from dual liefert z.B. 0.726481481481481

bzw. 24* 0.726481481481481 = 17.435555555555599

Und dann weiter mit 0,4355.. Stunden usw.

Vielleicht hilft dir das erstmal weiter. Könnte sein, dass es doch einfacher geht.
Mal warten, was die Profis dazu meinen. ;)
 
Um eine Zeitdifferenz in Oracle darzustellen kannst du entweder dezimal rechnen, so wie mschuetzdascho geschrieben hat, du kannst aber auch den Datentyp "INTERVAL" verwenden. Im Beispiel habe ich die 17.435555555555599 * 3600 genommen, das sind die Anzahl Sekunden zwischen den beiden Zeitpunkten. Sind 62768 Sekunden.

Code:
SQL> select INTERVAL '62768' SECOND  from dual;

INTERVAL'62768'SECOND
-----------------------------------------------
+00 17:26:08.000000
 
mschuetzda hat gesagt.:
Hallo,
soweit ich weiß. gibt es DateDiff(x,y). bei Oracle nicht.

select ..., ah_date4 - ah_date2 as Differenz

wobei die Differenz in Tagen (dezimal) angegeben wird.

select sysdate-trunc(sysdate) from dual liefert z.B. 0.726481481481481

bzw. 24* 0.726481481481481 = 17.435555555555599

Und dann weiter mit 0,4355.. Stunden usw.

Vielleicht hilft dir das erstmal weiter. Könnte sein, dass es doch einfacher geht.
Mal warten, was die Profis dazu meinen. ;)

Okay - das ist eigentlich ne gute Lösung!
Da die Dauer nie länger als 24 Stunden ist rechene ich einfach die Differenz * 1440. Sonst gibt es doch keine Möglichkeit, die Zahlen nach dem Komma nochmal weiter zu verarbeiten, oder?
 
Re: Datumsfelder subtrahieren !neu!

Ich habe hier eine ziemlich verzwickte SQL Abfrage. Folgendes Problem:
Nacheinander laufen ProgrammA und ProgrammB ab. Jeweils bei Programmstart und Programmende wird ein Wert in eine Datenbank geschrieben. Nun soll die Laufzeit ermittelt werden - also die Differenz zwischen ProgrammendeB und ProgrammstartA. Diese Zahl muss dann mit 1400 multipliziert werden um eine einigermaßen lesbare Zahl zu erhalten!
Wie kriege ich das mit SQL hin Bisher habe ich gedacht es würde so gehen:
Code:
SELECT 1400* ((SELECT Prog_ENDE
                       FROM uc4.ah
                       WHERE (oh.oh_idnr = ah.ah_idnr_bearb)
                       AND oh_name = ProgrammB)
              -
               (SELECT Prog_START
                       FROM uc4.ah
                       WHERE (oh.oh_idnr = ah.ah_idnr_bearb)
                       AND oh_name = ProgrammA))  AS Laufzeit
 FROM uc4.ah, uc4.oh
   WHERE (oh.oh_idnr = ah.ah_idnr_bearb);
dann kriege ich aber 1400 Ausgabezeilen, in denen 1x der (richtige) Wert steht! Wenn ich das "1400*" in eine Klammer ziehe, kriege ich einen Syntaxfehler.

Any ideas?
/tmw
 
sorry
...braucht sich niemand mehr den Kopf zerbrechen. Cheffe will das jetzt anders haben :mad: !
Werde aber gleich mal ein neues Thema aufmachen.
 
Zurück