Oracle 9.2i Datum subtrahieren ausgabe in sekunden

tplanitz

Erfahrenes Mitglied
Hallo,

ich subtrahiere 2 Datumswerte voneinander die vom Typ timestamp sind:

PHP:
select  to_char (A_DATE_END-A_DATE_BEGIN) interval
from test_table

Hat jemand eine Idee wie ich das Ergebnis in sekunden umrechnen kann ohne über den langen Weg der Extract () - Funktion zu gehen? Im moment kommt als Ergebnis nur sowas raus:
PHP:
Interval 
-------------------
+000012535 12:00:00.001000000
 
Hi,

Die Funktion DATEDIFF (oder DATE_DIFF?) könnte dir weiterhelfen. Die will aber als Parameter DateTime-Values. Musst du mal schauen, ob sie auch Timestamps akzeptiert.
 
Hi,
ganz herlichen Dank! Es gibt in Oracle diese funktion LEIDER nicht, aber ich habe selber eine mit Hilfe von Google gebastelt und alles funktioniert super. Das schlagwort war "DATEDIFF" , gibts leider nur bei mysql und SQL server. Na egal ich stells trotzdem mal hier ein:

Die Funktion
PHP:
create or replace function datediff( p_what in varchar2,
                                      p_d1   in date,
                                      p_d2   in date ) return number
 as
     l_result    number;
        begin
        select Round ((p_d2-p_d1) *
        decode( upper(p_what),
                     'SS', 24*60*60, 'MI', 24*60, 'HH', 24, NULL ),2)
       into l_result from dual;

       return l_result;
  end;
   /

Der temp_view zum ausprobieren:
PHP:
create or replace view temp_view
 as
 select   
          to_Date('01.01.2006', 'DD/MM/YYYY HH24:MI') d1,
          to_Date('14.07.2006', 'DD/MM/YYYY HH24:MI') d2
  from dual
 /


Der Aufruf der Funktion:
PHP:
 SELECT datediff('ss', current_timestamp-1, current_timestamp) AS "seconds" FROM dual

Beste Grüße Thorsten
 
Soweit ist die Funktion i.O. nur bzgl deines ersten Postings machst du einen kleinen Fehler in derFunktion: Sie erwartet INPUT Parameter vom Typ DATE und nicht TIMESTAMP, d.h. Oracle macht eine implizite Konvertierung von Timestamp zu DATE.

SQL:
SQL> select cast( systimestamp AS date ), systimestamp from dual;

CAST(SYSTIMESTAMPAS SYSTIMESTAMP
------------------- ---------------------------------------------------------------------------
14.07.2006 15:20:59 14.07.06 15:20:59,207000 +02:00

Wie man sieht gehen dabei die Millisekunden und die Zeitzone verloren. Wenn dir die egal sind, ist ja alles wunderbar ;-)
Ansonsten musst du wohl leider wie oben beschrieben mit EXTRACT arbeiten.
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück