Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Subtrahieren des Zeitstempels in Oracle, das seltsame Daten zurückgibt

Ich denke, Ihre Spalten sind als timestamp definiert statt date .

Das Ergebnis der Subtraktion von Zeitstempeln ist ein interval wohingegen das Ergebnis der Subtraktion von date Spalten ist eine Zahl, die die Anzahl der Tage zwischen den beiden Daten darstellt.

Dies ist im Handbuch dokumentiert:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042

Wenn Sie also Ihre Timestamp-Spalten bis heute umwandeln, sollten Sie das erhalten, was Sie erwarten:

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;

Bearbeiten :

Will man das Intervall umrechnen also z.B. die Anzahl der Sekunden (als Zahl), können Sie etwa so vorgehen:

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;

Das Ergebnis des Obigen ist 55499.5802