Esa función no existe en Oracle RDMBS; claramente lo hizo en Oracle Lite (que nunca he encontrado) y creo que está en otras bases de datos como MySQL.
Hay documentación que cubre aritmética de intervalos y fechas y horas que te llevará parte del camino allí; puede restar una marca de tiempo de otra; o una fecha de otra, o una combinación de las dos, pero es más sencillo ceñirse a un tipo de datos. Según cuál utilice, obtendrá un intervalo o un número que representa la cantidad de días:
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
Si solo desea la cantidad de días completos, puede usar extract()
para que el intervalo obtenga solo el elemento que desea, o trunc()
para que el número elimine la parte fraccionaria:
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
También puede trunc()
la fecha actual antes de la comparación si lo prefiere, por lo que está comparando ambos a la medianoche, lo que significa que no habrá una parte del día fraccionario para eliminar:
SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;
TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
6169
He usado literales de fecha ANSI para la fecha fija, pero puede usar una variable o columna de fecha o marca de tiempo existente; o to_date()
o to_timestamp()
si tiene una cadena en un formato diferente.
También puede usar extract()
para convertir los componentes de un intervalo en un valor combinado, como se muestra aquí
; y también asegúrese de conocer la diferencia entre current_date
y sysdate
y los equivalentes de marca de tiempo
.