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.