Essa função não existe no Oracle RDMBS; claramente no Oracle Lite (que eu nunca encontrei) e acredito que esteja em outros bancos de dados como o MySQL.
Há documentação que abrange aritmética de data e hora e intervalo que o levará até lá; você pode subtrair um timestamp de outro; ou uma data de outra, ou uma mistura dos dois - mas é mais simples manter um tipo de dados. Dependendo de qual você usar, você obterá um intervalo ou um número representando o número de dias:
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
Se você quiser apenas o número de dias inteiros, use
extract()
para que o intervalo obtenha apenas o elemento desejado ou trunc()
para o número remover a parte fracionária: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
Você também pode
trunc()
a data atual antes da comparação, se preferir, então você está comparando as duas à meia-noite, o que significa que não haverá uma parte do dia fracionária a ser removida:SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;
TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
6169
Usei literais de data ANSI para a data fixa, mas você pode usar uma variável ou coluna de data ou carimbo de data/hora existente; ou
to_date()
ou to_timestamp()
se você tiver uma string em um formato diferente. Você também pode usar
extract()
para converter os componentes de um intervalo em um valor combinado, como mostrado aqui
; e também certifique-se de estar ciente da diferença entre current_date
e sysdate
, e os equivalentes de carimbo de data/hora
.