La fecha de emisión de una factura, de llegada de un avión, de ingreso en una web, podríamos seguir poniendo infinidad de ejemplos, lo que significa que es una información que se requiere en muchas situaciones y es importante guardar.
En los SGBD se utilizan mucho las fechas. Oracle tiene dos tipos de datos para manejar fechas, son DATE
y TIMESTAMP.
DATE
almacena fechas concretas incluyendo a veces la hora.TIMESTAMP
almacena un instante de tiempo más concreto que puede incluir hasta fracciones de segundo.
Podemos realizar operaciones numéricas con las fechas:
- Le podemos sumar números y esto se entiende como sumarles días, si ese número tiene decimales se suman días, horas, minutos y segundos. El resultado es una fecha.
- Le podemos restar números y esto se entiende como restarle días, ir atrás en el calendario, si ese número tiene decimales se restan días, horas, minutos y segundos. El resultado es una fecha.
- La diferencia o resta entre dos fechas nos dará el número de días entre esas fechas.
En Oracle tenemos las siguientes funciones más comunes:
SYSDATE
Devuelve la fecha y hora actuales. Ejemplo:
SELECT SYSDATE FROM DUAL; --Resultado: 15/08/20
SYSTIMESTAMP
Devuelve la fecha y hora actuales en formatoTIMESTAMP.
Ejemplo:
SELECT SYSTIMESTAMP FROM DUAL; --Resultado: 15/08/20 11:40:41,969000 +02:00
ADD_MONTHS(fecha, n)
Añade a la fecha el número de meses indicado con n. Ejemplo:
SELECT ADD_MONTHS('27/07/11', 5) FROM DUAL; --Resultado: 27/12/11
MONTHS_BETWEEN(fecha1, fecha2)
Devuelve el número de meses que hay entre fecha1 y fecha2. Ejemplo:
SELECT MONTHS_BETWEEN('12/07/11','12/03/11') FROM DUAL; --Resultado: 4
LAST_DAY(fecha)
Devuelve el último día del mes al que pertenece la fecha. El valor devuelto es tipoDATE.
Ejemplo:
SELECT LAST_DAY('27/07/11') FROM DUAL; --Resultado: 31/07/11
NEXT_DAY(fecha, d)
Indica el día que corresponde si añadimos a la fecha el día d. El día devuelto puede ser texto ('Lunes', Martes', ..) o el número del día de la semana (1=lunes, 2=martes, ..) dependiendo de la configuración. Ejemplo:
SELECT NEXT_DAY('31/12/11','LUNES') FROM DUAL; --Resultado: 02/01/12
EXTRACT(valor FROM fecha)
Extrae un valor de una fecha concreta. El valor puede ser day, month, year, hours, etc. Ejemplo:
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; --Resultado: 8
En Oracle: Los operadores aritméticos "+" (más) y "-" (menos) pueden emplearse para las fechas. Por ejemplo:
SELECT SYSDATE – 5 FROM DUAL; -- Devuelve la fecha correspondiente a 5 días antes de la fecha actual
Se pueden emplear estas funciones utilizando como argumento el nombre de un campo de tipo fecha.