Oracle
 sql >> Base de données >  >> RDS >> Oracle

Calcul de la différence entre deux horodatages dans Oracle en millisecondes

Lorsque vous soustrayez deux variables de type TIMESTAMP , vous obtenez un INTERVAL DAY TO SECOND qui comprend un nombre de millisecondes et/ou de microsecondes selon la plate-forme. Si la base de données s'exécute sous Windows, systimestamp aura généralement des millisecondes. Si la base de données fonctionne sous Unix, systimestamp aura généralement des microsecondes.

  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

Vous pouvez utiliser le EXTRACT fonction pour extraire les éléments individuels d'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

Vous pouvez ensuite convertir chacun de ces composants en millisecondes et les additionner

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

Normalement, cependant, il est plus utile d'avoir soit le INTERVAL DAY TO SECOND représentation ou d'avoir des colonnes séparées pour les heures, les minutes, les secondes, etc. plutôt que de calculer le nombre total de millisecondes entre deux TIMESTAMP valeurs.