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