sql >> Database >  >> RDS >> Oracle

TIMESTAMPDIFF in Oracle 11g?

Die functie bestaat niet in Oracle RDMBS; het deed het duidelijk in Oracle Lite (wat ik nog nooit ben tegengekomen) en ik geloof dat het in andere databases zoals MySQL is.

Er is documentatie over datetime en interval-rekenkunde die je een deel van de weg daarheen zal brengen; je kunt de ene tijdstempel van de andere aftrekken; of de ene datum van de andere, of een combinatie van beide - maar het is eenvoudiger om bij één gegevenstype te blijven. Afhankelijk van welke u gebruikt, krijgt u een interval of een getal dat het aantal dagen vertegenwoordigt:

SQL> SELECT CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00' FROM DUAL;

CURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00'
---------------------------------------------------------------------------
+000006169 16:16:21.287166000

SQL> SELECT CURRENT_DATE - DATE '1998-12-09' FROM DUAL;

CURRENT_DATE-DATE'1998-12-09'
-----------------------------
                   6169.67775

Als je alleen het aantal hele dagen wilt, kun je extract() voor het interval om precies het gewenste element te krijgen, of trunc() voor het getal om het breukdeel te verwijderen:

SQL> SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00') FROM DUAL;

EXTRACT(DAYFROMCURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00')
---------------------------------------------------------------
                                                           6169

SQL> SELECT TRUNC(CURRENT_DATE - DATE '1998-12-09') FROM DUAL;

TRUNC(CURRENT_DATE-DATE'1998-12-09')
------------------------------------
                                6169

U kunt ook trunc() de huidige datum vóór vergelijking als je wilt, dus je vergelijkt beide om middernacht, wat betekent dat er geen fractioneel dagdeel hoeft te worden verwijderd:

SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;

TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
                                6169

Ik heb ANSI-datumliteralen gebruikt voor de vaste datum, maar u kunt een bestaande datum- of tijdstempelvariabele of kolom gebruiken; of to_date() of to_timestamp() als je een string in een ander formaat hebt.

Je kunt ook extract() . gebruiken om de componenten van een interval om te zetten in een gecombineerde waarde, zoals hier weergegeven ; en zorg er ook voor dat u op de hoogte bent van het verschil tussen current_date en sysdate , en de tijdstempelequivalenten .



  1. Cumulatieve som over een reeks rijen in mysql

  2. Json opslaan in MySQL-database vanuit Node.js

  3. lokale postgres db blijft fouten geven dubbele sleutelwaarde schendt unieke beperking

  4. MySQL VARCHAR-resultaten bestellen