Po odjęciu dwóch zmiennych typu TIMESTAMP , otrzymasz INTERVAL DAY TO SECOND co obejmuje liczbę milisekund i/lub mikrosekund w zależności od platformy. Jeśli baza danych działa w systemie Windows, systimestamp zazwyczaj będą miały milisekundy. Jeśli baza danych działa w systemie Unix, systimestamp zazwyczaj będą miały mikrosekundy.
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
Możesz użyć EXTRACT funkcja wyodrębniania poszczególnych elementów 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
Następnie możesz przekonwertować każdy z tych składników na milisekundy i dodać je
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
Zwykle jednak bardziej przydatne jest posiadanie albo INTERVAL DAY TO SECOND reprezentacja lub posiadanie oddzielnych kolumn dla godzin, minut, sekund itp. zamiast obliczania całkowitej liczby milisekund między dwoma TIMESTAMP wartości.