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

Hvordan finder man forskelle s/h TIMESTAMP-formatværdier i Oracle?

Resultatet af tidsstempel-aritmetikken er en INTERVAL-datatype. Du har en INTERVAL DAG TIL ANDEN der...

Hvis du vil have antallet af minutter, ville en måde være at bruge EXTRACT() , for eksempel:

select extract( minute from interval_difference ) * 60 
        + extract( hour from interval_difference ) * 60
        + extract( day from interval_difference ) * 60 * 24
  from ( select systimestamp - (systimestamp - 1) as interval_difference
           from dual )

Alternativt kan du bruge et trick med datoer:

select sysdate + (interval_difference * 1440) - sysdate
  from (select systimestamp - (systimestamp - 1) as interval_difference
          from dual )

"Trick"-versionen fungerer på grund af operatørens rækkefølge og forskellene mellem dato- og tidsstempel-aritmetik.

Til at begynde med ser operationen sådan ud:

date + ( interval * number ) - date

Som nævnt i dokumentationen:

Oracle evaluerer udtryk inden for parentes, før de evaluerer dem udenfor.

Så den første operation udførte den for at gange intervallet med 1.440. Et interval, det vil sige en diskret tidsperiode, ganget med et tal er en anden diskret tidsperiode, se dokumentationen om dato- og intervalaritmetik. Så resultatet af denne operation er et interval, der efterlader os med:

date + interval - date

Plus-operatoren har forrang over minus her. Årsagen til dette kan være, at et interval minus en dato er en ugyldig operation, men dokumentationen antyder også, at det er tilfældet (kommer ikke ud og siger det). Så den første operation, der udføres, er dato + interval. En dato plus et interval er en dato. Forlader bare

date - date

I henhold til dokumentationen resulterer dette i et heltal, der repræsenterer antallet af dage. Du gange dog det oprindelige interval med 1.440, så dette repræsenterede nu 1.440 gange antallet af dage, det ellers ville have. Du står så tilbage med antallet af sekunder.

Det er værd at bemærke, at:

Når intervalberegninger returnerer en datotidsværdi, skal resultatet være en faktisk datotidsværdi, eller databasen returnerer en fejl. For eksempel returnerer de næste to udsagn fejl:

"Trick"-metoden vil mislykkes, sjældent, men det vil stadig mislykkes. Som altid er det bedst at gøre det ordentligt.



  1. Lagring af UTF-16/Unicode-data i SQL Server

  2. Sådan opretter du en unik begrænsning på flere kolonner i SQL Server - SQL Server / TSQL vejledning del 96

  3. Opret en visning med ORDER BY-klausul

  4. Hvad kan Query Plan fortælle?