Databases

T01-007-04 Funciones de fechas

Enunciado

Aritmética de fechas.

Antes de comenzar con las funciones de fechas, es importante entender que podemos hacer ciertas operaciones aritméticas con las fechas.

Por ejemplo, podemos incrementar o decrementar una fecha en un número de días (incluso con fracciones de días).

SELECT
    CURRENT_DATE -1 AS "AYER",
    CURRENT_DATE AS "HOY",
    CURRENT_DATE + 1 AS "MAÑANA"
FROM DUAL

AYER HOY MAÑANA
22-SEP-21 23-SEP-21 24-SEP-21

CURRENT_DATE: Devuelve la fecha actual.

Más adelante, podremos, incluso, restar 2 fechas y saber el número de días transcurridos entre ellas.

Funciones de fecha

A continuación se muestran una tabla con funciones de cadenas de caracteres que, en esta ocasión, devuelven un resultado numérico.

Función

Descripción

SYSDATE

Devuelve la fecha del sistema.

ADD_MONTHS(fecha, n)

Devuelve la fecha ‘fecha’ incrementada en ‘n’ meses

LAST_DAY(fecha)

Devuelve la fecha del último día del mes que contiene ‘fecha’

MONTHS_BETWEEN(fecha1, fecha2)

Devuelve la deferencia en meses entre las fechas ‘fecha1’ y ‘fecha2’

NEXT_DAY(fecha, cad)

Devuelve la fecha del primer día de la semana indicado por ‘cad’ después de la fecha indicada por ‘fecha’. El día de la semana en ‘cad’ se indica con su nombre, es decir, lunes (monday), martes (tuesday), ...

TO_DATE(cad, formato, nlsparam) Convierte la cadena cad en una valor de tipo DATE atendiendo a la cadena de formato.

La lista completa de funciones la podéis obtener de la documentación de Funciones de fechas en Oracle.

Ejemplo:

La función ADD_MONTHS(fecha, n) devuelve la fecha ‘fecha’ incrementada en ‘n’ meses.

Podemos averiguar quién lleva más de 20 años contratado en la empresa si, al incrementar la fecha de contratación en 20 años * 12 meses, la fecha resultante todavía es menor que la fecha actual:

SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM HR.employees
WHERE ADD_MONTHS(HIRE_DATE, 20 * 12) < CURRENT_DATE

FIRST_NAME LAST_NAME HIRE_DATE
Lex De Haan 13-JAN-01

Ejercicio:

Trata de obtener los empleados que tienen más de 20 años de antigüedad, pero, en esta ocasión, utilizando la función MONTHS_BETWEEN(fecha1, fecha2), que devuelve la deferencia en meses entre las fechas ‘fecha1’ y ‘fecha2

Ordena el resultado alfabéticamente por los apellidos.

Tipo

SELECT

Solución


												
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE, FLOOR(MONTHS_BETWEEN(CURRENT_DATE, HIRE_DATE) / 12) AS "ANTIGUEDAD" FROM HR.employees WHERE MONTHS_BETWEEN(CURRENT_DATE, HIRE_DATE) / 12 > 20 ORDER BY LAST_NAME

Prueba


											

Librerías (Onfly databases)