När du subtraherar två variabler av typen TIMESTAMP
, får du en INTERVAL DAY TO SECOND
som inkluderar ett antal millisekunder och/eller mikrosekunder beroende på plattform. Om databasen körs på Windows, systimestamp
kommer i allmänhet att ha millisekunder. Om databasen körs på Unix, systimestamp
kommer i allmänhet att ha mikrosekunder.
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
Du kan använda EXTRACT
funktion för att extrahera de individuella elementen i en 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
Du kan sedan konvertera var och en av dessa komponenter till millisekunder och lägga ihop dem
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
Normalt är det dock mer användbart att ha antingen INTERVAL DAY TO SECOND
representation eller att ha separata kolumner för timmar, minuter, sekunder, etc. istället för att beräkna det totala antalet millisekunder mellan två TIMESTAMP
värden.