Ich denke, Ihre Spalten sind als timestamp
definiert statt date
.
Das Ergebnis der Subtraktion von Zeitstempeln ist ein interval
wohingegen das Ergebnis der Subtraktion von date
Spalten ist eine Zahl, die die Anzahl der Tage zwischen den beiden Daten darstellt.
Dies ist im Handbuch dokumentiert:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042
Wenn Sie also Ihre Timestamp-Spalten bis heute umwandeln, sollten Sie das erhalten, was Sie erwarten:
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;
Bearbeiten :
Will man das Intervall umrechnen also z.B. die Anzahl der Sekunden (als Zahl), können Sie etwa so vorgehen:
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;
Das Ergebnis des Obigen ist 55499.5802