sql >> Base de Datos >  >> RDS >> Oracle

Restar la marca de tiempo en Oracle que devuelve datos extraños

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