Wie berechne ich die Zeitdifferenz in Millisekunden zwischen zwei Zeitstempeln in Oracle?
Wenn Sie zwei Variablen vom Typ TIMESTAMP
subtrahieren, erhalten Sie ein INTERVAL DAY TO SECOND
, das je nach Plattform eine Anzahl von Millisekunden und/oder Mikrosekunden enthält. Wenn die Datenbank unter Windows läuft, hat systimestamp
im Allgemeinen Millisekunden. Läuft die Datenbank unter Unix, enthält systimestamp
im Allgemeinen Mikrosekunden.
1 select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' )
2* from dual
SQL> /
SYSTIMESTAMP-TO_TIMESTAMP('2012-07-23','YYYY-MM-DD')
---------------------------------------------------------------------------
+000000000 14:51:04.339000000
Sie können die Funktion EXTRACT
verwenden, um die einzelnen Elemente eines INTERVAL DAY TO SECOND
zu extrahieren
SQL> ed
Wrote file afiedt.buf
1 select extract( day from diff ) days,
2 extract( hour from diff ) hours,
3 extract( minute from diff ) minutes,
4 extract( second from diff ) seconds
5 from (select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' ) diff
6* from dual)
SQL> /
DAYS HOURS MINUTES SECONDS
---------- ---------- ---------- ----------
0 14 55 37.936
Sie können dann jede dieser Komponenten in Millisekunden umwandeln und sie addieren
SQL> ed
Wrote file afiedt.buf
1 select extract( day from diff )*24*60*60*1000 +
2 extract( hour from diff )*60*60*1000 +
3 extract( minute from diff )*60*1000 +
4 round(extract( second from diff )*1000) total_milliseconds
5 from (select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' ) diff
6* from dual)
SQL> /
TOTAL_MILLISECONDS
------------------
53831842
Normalerweise ist es jedoch nützlicher, entweder die Darstellung INTERVAL DAY TO SECOND
oder separate Spalten für Stunden, Minuten, Sekunden usw. zu haben, als die Gesamtzahl der Millisekunden zwischen zwei TIMESTAMP
-Werten zu berechnen.
SELECT numtodsinterval(date1-date2,'day') time_difference from dates;
SELECT (extract(DAY FROM time2-time1)*24*60*60)+
(extract(HOUR FROM time2-time1)*60*60)+
(extract(MINUTE FROM time2-time1)*60)+
extract(SECOND FROM time2-time1)
into diff FROM dual;
RETURN diff;
Select date1 - (date2 - 1) * 24 * 60 *60 * 1000 from Table;