Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Calculando a diferença entre dois timestamps no Oracle em milissegundos


Ao subtrair duas variáveis ​​do tipo TIMESTAMP , você recebe um INTERVAL DAY TO SECOND que inclui um número de milissegundos e/ou microssegundos dependendo da plataforma. Se o banco de dados estiver sendo executado no Windows, systimestamp geralmente terá milissegundos. Se o banco de dados estiver sendo executado no Unix, systimestamp geralmente terá microssegundos.
  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

Você pode usar o EXTRACT função para extrair os elementos individuais de um 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

Você pode então converter cada um desses componentes em milissegundos e adicioná-los
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, no entanto, é mais útil ter o INTERVAL DAY TO SECOND representação ou ter colunas separadas para horas, minutos, segundos, etc. em vez de calcular o número total de milissegundos entre dois TIMESTAMP valores.