Oracle
 sql >> Database >  >> RDS >> Oracle

Calcolo della differenza tra due timestamp in Oracle in millisecondi

Quando sottrai due variabili di tipo TIMESTAMP , ottieni un INTERVAL DAY TO SECOND che include un numero di millisecondi e/o microsecondi a seconda della piattaforma. Se il database è in esecuzione su Windows, systimestamp avrà generalmente millisecondi. Se il database è in esecuzione su Unix, systimestamp avrà generalmente microsecondi.

  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

Puoi usare il EXTRACT funzione per estrarre i singoli elementi di 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

Puoi quindi convertire ciascuno di questi componenti in millisecondi e sommarli

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, tuttavia, è più utile avere il INTERVAL DAY TO SECOND rappresentazione o avere colonne separate per ore, minuti, secondi, ecc. invece di calcolare il numero totale di millisecondi tra due TIMESTAMP valori.