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.