Wanneer u twee variabelen van het type TIMESTAMP
. aftrekt , krijg je een INTERVAL DAY TO SECOND
die een aantal milliseconden en/of microseconden omvat, afhankelijk van het platform. Als de database op Windows draait, systimestamp
zal over het algemeen milliseconden hebben. Als de database op Unix draait, systimestamp
zal over het algemeen microseconden hebben.
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
U kunt de EXTRACT
. gebruiken functie om de individuele elementen van een 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
U kunt vervolgens elk van deze componenten converteren naar milliseconden en ze optellen
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
Normaal gesproken is het echter handiger om ofwel de INTERVAL DAY TO SECOND
weergave of om aparte kolommen te hebben voor uren, minuten, seconden, enz. in plaats van het totale aantal milliseconden tussen twee TIMESTAMP
te berekenen waarden.