Supongo que tus columnas están definidas como timestamp
en lugar de date
.
El resultado de restar las marcas de tiempo es un interval
mientras que el resultado de restar date
columnas es un número que representa el número de días entre las dos fechas.
Esto está documentado en el manual:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042
Entonces, cuando lanzas tus columnas de marca de tiempo hasta la fecha, deberías obtener lo que esperas:
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;
Editar :
Si desea convertir el intervalo, p. la cantidad de segundos (como un número), puede hacer algo como esto:
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;
El resultado de lo anterior es 55499.5802