sql >> Database teknologi >  >> RDS >> Oracle

Trækker tidsstemplet i oracle og returnerer mærkelige data

Jeg gætter på, at dine kolonner er defineret som timestamp i stedet for date .

Resultatet af at trække tidsstempler fra er et interval hvorimod resultatet af at trække date fra kolonner er et tal, der repræsenterer antallet af dage mellem de to datoer.

Dette er dokumenteret i manualen:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042

Så når du caster dine tidsstempelkolonner til dato, bør du få, hvad du forventer:

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;

Rediger :

Hvis du vil konvertere intervallet så f.eks. antallet af sekunder (som et tal), kan du gøre noget som dette:

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;

Resultatet af ovenstående er 55499.5802



  1. Konvertering af en oracle-forespørgsel til MySQL-forespørgsel

  2. Beskyttelse af en mappe mod direkte URL-adgang

  3. Hvad er forskellen mellem en midlertidig tabel vs global midlertidig tabel i Oracle?

  4. Hvad vil det sige at "normalisere" en database?