Databases

T01-007-04 Funciones de fechas

Enunciado

Aunque, en realidad, la función TO_DATE(cad, formato, nlsparam) está clasificada como función de conversión, se ha considerado conveniente abordarla dentro de las funciones de fechas.
 

Ejemplo:

Anteriormente, hemos visto cómo podíamos utilizar la aritmética de fechas par, por ejemplo, conocer la fecha de mañana:

SELECT CURRENT_DATE + 1 AS "MAÑANA"
FROM DUAL

MAÑANA
24-SEP-21

La sentencia anterior se ejecuta correctamente porque el valor devuelto por CURRENT_DATE es de tipo fecha. En cambio, si intentamos ejecutar la siguiente sentencia, el resultado sería un error:

SELECT '23-SEP-21' + 1
FROM DUAL


ORA-00904: "23-SEP-21": invalid identifier

Por ello, antes de poder trabajar con esa fecha, tendremos que convertirla al tipo de datos DATE con la función TO_DATE():

SELECT TO_DATE('23-SEP-21', 'DD-MON-YY') + 1  AS "MAÑANA"
FROM DUAL

MAÑANA
24-SEP-21

Finalmente, para que no haya problemas con la configuración del idioma del servidor, vamos a incorporar a la sentencia anterior el parámetro nls, haciendo coincidir el lenguaje con el configurado en livesql:

SELECT TO_DATE('23-SEP-21', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = American') + 1  AS "MAÑANA"
FROM DUAL

MAÑANA
24-SEP-21

Ejercicio:

Utilizando la función MONTHS_BETWEEN(fecha1, fecha2)del ejercicio anterior, ¿qué empleados tendrán más de 20 años de antigüedad el '01-JAN-24'

Ordena el resultado alfabéticamente por los apellidos.

Tipo

SELECT

Solución


												
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE, FLOOR(MONTHS_BETWEEN(TO_DATE('01-JAN-24', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = American'), HIRE_DATE) / 12) AS "ANTIGUEDAD" FROM HR.employees WHERE MONTHS_BETWEEN(TO_DATE('01-JAN-24', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = American'), HIRE_DATE) / 12 > 20 ORDER BY LAST_NAME

Prueba


											

Librerías (Onfly databases)