Den funktion findes ikke i Oracle RDMBS; det gjorde det tydeligvis i Oracle Lite (som jeg aldrig har stødt på), og jeg tror, det er i andre databaser som MySQL.
Der er dokumentation, der dækker datotid og intervalaritmetik som vil få dig en del af vejen dertil; du kan enten trække et tidsstempel fra et andet; eller en dato fra en anden, eller en blanding af de to – men det er nemmere at holde sig til én datatype. Afhængigt af, hvad du bruger, får du enten et interval eller et tal, der repræsenterer antallet af dage:
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
Hvis du bare vil have antallet af hele dage, kan du bruge >extract()
for intervallet for at få lige det element, du ønsker, eller >trunc()
for tallet for at fjerne brøkdelen:
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
Du kan også trunc()
den aktuelle dato før sammenligning, hvis du foretrækker det, så du sammenligner begge ved midnat, hvilket betyder, at der ikke vil være en del af dagen at fjerne:
SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;
TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
6169
Jeg har brugt ANSI-dato-literals til den faste dato, men du kan bruge en eksisterende dato- eller tidsstempelvariabel eller kolonne; eller to_date()
eller to_timestamp()
hvis du har en streng i et andet format.
Du kan også bruge extract()
for at konvertere et intervals komponenter til en kombineret værdi, som vist her
; og sørg også for, at du er opmærksom på forskellen mellem current_date
og sysdate
, og tidsstemplets ækvivalenter
.