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 identifierPor ello, antes de poder trabajar con esa fecha, tendremos que convertirla al tipo de datos
DATEcon la funciónTO_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
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)

