Wenn Sie zwei Variablen vom Typ TIMESTAMP
subtrahieren , erhalten Sie ein INTERVAL DAY TO SECOND
die je nach Plattform eine Anzahl von Millisekunden und/oder Mikrosekunden umfasst. Wenn die Datenbank unter Windows ausgeführt wird, systimestamp
hat im Allgemeinen Millisekunden. Wenn die Datenbank unter Unix läuft, systimestamp
hat 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 den EXTRACT
verwenden Funktion zum Extrahieren der einzelnen Elemente eines INTERVAL DAY TO SECOND
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 sinnvoller, entweder das INTERVAL DAY TO SECOND
zu haben Darstellung oder separate Spalten für Stunden, Minuten, Sekunden usw. zu haben, anstatt die Gesamtzahl der Millisekunden zwischen zwei TIMESTAMP
zu berechnen Werte.