sql >> Base de Datos >  >> RDS >> Oracle

Cálculo de la diferencia entre dos marcas de tiempo en Oracle en milisegundos

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.