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

Wie finde ich Unterschiede im s / w-TIMESTAMP-Format in Oracle?

Das Ergebnis der Zeitstempelarithmetik ist ein INTERVAL-Datentyp. Sie haben dort ein INTERVALL TAG ZUM SEKUNDEN...

Wenn Sie die Anzahl der Minuten wollen, wäre eine Möglichkeit, EXTRACT() zu verwenden , zum Beispiel:

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 )

Alternativ können Sie einen Trick mit Datumsangaben verwenden:

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

Die "Trick"-Version funktioniert aufgrund der Rangfolge der Operatoren und der Unterschiede zwischen Datums- und Zeitstempelarithmetik.

Zunächst sieht die Operation so aus:

date + ( interval * number ) - date

Wie in der Dokumentation erwähnt:

Oracle wertet Ausdrücke innerhalb von Klammern aus, bevor es die außerhalb auswertet.

Die erste Operation führte also dazu, das Intervall mit 1.440 zu multiplizieren. Ein Intervall, d.h. ein diskreter Zeitraum, multipliziert mit einer Zahl, ist ein weiterer diskreter Zeitraum, siehe die Dokumentation zu datetime und Intervallarithmetik. Das Ergebnis dieser Operation ist also ein Intervall, das uns Folgendes übrig lässt:

date + interval - date

Der Plus-Operator hat hier Vorrang vor dem Minus. Der Grund dafür könnte sein, dass ein Intervall minus einem Datum eine ungültige Operation ist, aber die Dokumentation impliziert auch, dass dies der Fall ist (kommt nicht heraus und sagt es). Die erste durchgeführte Operation ist also Datum + Intervall. Ein Datum plus Intervall ist ein Datum. Verlassen Sie nur

date - date

Laut Dokumentation ergibt dies eine Ganzzahl, die die Anzahl der Tage darstellt. Sie haben das ursprüngliche Intervall jedoch mit 1.440 multipliziert, sodass dies jetzt das 1.440-fache der Anzahl an Tagen darstellt, die es sonst hätte. Sie haben dann die Anzahl der Sekunden übrig.

Es ist erwähnenswert, dass:

Wenn Intervallberechnungen einen datetime-Wert zurückgeben, muss das Ergebnis ein tatsächlicher datetime-Wert sein oder die Datenbank gibt einen Fehler zurück. Beispielsweise geben die nächsten beiden Anweisungen Fehler zurück:

Die "Trick"-Methode wird scheitern, selten, aber es wird immer noch scheitern. Wie immer ist es am besten, es richtig zu machen.