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.