Jeg gætter på, at dine kolonner er defineret som timestamp
i stedet for date
.
Resultatet af at trække tidsstempler fra er et interval
hvorimod resultatet af at trække date
fra kolonner er et tal, der repræsenterer antallet af dage mellem de to datoer.
Dette er dokumenteret i manualen:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042
Så når du caster dine tidsstempelkolonner til dato, bør du få, hvad du forventer:
with dates as (
select timestamp '2012-04-27 09:00:00' as col1,
timestamp '2012-04-26 17:35:00' as col2
from dual
)
select col1 - col2 as ts_difference,
cast(col1 as date) - cast(col2 as date) as dt_difference
from dates;
Rediger :
Hvis du vil konvertere intervallet så f.eks. antallet af sekunder (som et tal), kan du gøre noget som dette:
with dates as (
select timestamp '2012-04-27 09:00:00.1234' as col1,
timestamp '2012-04-26 17:35:00.5432' as col2
from dual
)
select col1 - col2 as ts_difference,
extract(hour from (col1 - col2)) * 3600 +
extract(minute from (col1 - col2)) * 60 +
(extract(second from (col1 - col2)) * 1000) / 1000 as seconds
from dates;
Resultatet af ovenstående er 55499.5802