Oracle
 sql >> Base de données >  >> RDS >> Oracle

Soustraction de l'horodatage dans Oracle renvoyant des données étranges

Je suppose que vos colonnes sont définies comme timestamp plutôt que date .

Le résultat de la soustraction des horodatages est un interval alors que le résultat de la soustraction de date colonnes est un nombre représentant le nombre de jours entre les deux dates.

Ceci est documenté dans le manuel :
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042

Ainsi, lorsque vous transmettez vos colonnes d'horodatage à ce jour, vous devriez obtenir ce que vous attendez :

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;

Modifier :

Si vous souhaitez convertir l'intervalle, par ex. le nombre de secondes (sous forme de nombre), vous pouvez faire quelque chose comme ceci :

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;

Le résultat de ce qui précède est 55499.5802