sql >> Database >  >> RDS >> Oracle

Tijdstempel aftrekken in orakel die rare gegevens retourneert

Ik neem aan dat je kolommen zijn gedefinieerd als timestamp in plaats van date .

Het resultaat van het aftrekken van tijdstempels is een interval terwijl het resultaat van het aftrekken van date kolommen is een getal dat het aantal dagen tussen de twee datums vertegenwoordigt.

Dit is gedocumenteerd in de handleiding:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042

Dus wanneer u uw tijdstempelkolommen tot nu toe cast, zou u moeten krijgen wat u verwacht:

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;

Bewerken :

Als u het interval wilt omrekenen, zodat b.v. het aantal seconden (als een getal), kun je zoiets als dit doen:

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;

Het resultaat van het bovenstaande is 55499.5802



  1. Stel waarde =waarde +1 in boekenplank.js

  2. Hoe maak ik verbinding met Docker Oracle instance

  3. Ik krijg een Er is een poging gedaan om een ​​programma te laden met een onjuiste indelingsfout op een SQL Server-replicatieproject

  4. Hoe verander ik alle tabellen in mijn database in een UTF8-tekenset?