Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Subtraindo o timestamp no oracle retornando dados estranhos


Acho que suas colunas estão definidas como timestamp em vez de date .

O resultado da subtração de timestamps é um interval enquanto o resultado da subtração de date colunas é um número que representa o número de dias entre as duas datas.

Isso está documentado no manual:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042

Portanto, ao converter suas colunas de carimbo de data/hora até o momento, você deve obter o que espera:
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 :


Se você deseja converter o intervalo, por exemplo, o número de segundos (como um número), você pode fazer algo assim:
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;

O resultado acima é 55499.5802