Cuando restas dos variables de tipo TIMESTAMP
, obtienes un INTERVAL DAY TO SECOND
que incluye un número de milisegundos y/o microsegundos dependiendo de la plataforma. Si la base de datos se ejecuta en Windows, systimestamp
generalmente tendrá milisegundos. Si la base de datos se ejecuta en Unix, systimestamp
generalmente tendrá microsegundos.
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
Puedes usar el EXTRACT
función para extraer los elementos individuales de un 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
Luego puede convertir cada uno de esos componentes en milisegundos y sumarlos
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
Normalmente, sin embargo, es más útil tener el INTERVAL DAY TO SECOND
representación o tener columnas separadas para horas, minutos, segundos, etc. en lugar de calcular el número total de milisegundos entre dos TIMESTAMP
valores.