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.