Ik neem aan dat je kolommen zijn gedefinieerd als timestamp
in plaats van date
.
Het resultaat van het aftrekken van tijdstempels is een interval
terwijl het resultaat van het aftrekken van date
kolommen is een getal dat het aantal dagen tussen de twee datums vertegenwoordigt.
Dit is gedocumenteerd in de handleiding:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042
Dus wanneer u uw tijdstempelkolommen tot nu toe cast, zou u moeten krijgen wat u verwacht:
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;
Bewerken :
Als u het interval wilt omrekenen, zodat b.v. het aantal seconden (als een getal), kun je zoiets als dit doen:
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;
Het resultaat van het bovenstaande is 55499.5802