🧚 ¡Oye! Beekeeper Studio es una GUI de bases de datos rápida, moderna y de código abierto Descarga
9 de septiembre de 2024 Por Matthew Rathbone

Identificar días hábiles con la función TO_CHAR() de Oracle

El siguiente ejemplo muestra cómo usar TO_CHAR() para devolver solo las filas cuya fecha cae en un día hábil.

SELECT order_id, order_date
FROM orders
WHERE TO_CHAR(order_date, 'DY') NOT IN ('SAT', 'SUN');

Resultado esperado:

ORDER_ID | ORDER_DATE
---------|------------
1001     | 04-SEP-2023
1002     | 05-SEP-2023
1005     | 06-SEP-2023
1010     | 07-SEP-2023

En esta consulta:

  • TO_CHAR(order_date, 'DY') extrae el nombre abreviado del día de la columna order_date.
  • La cláusula NOT IN ('SAT', 'SUN') descarta las filas en las que el día es sábado o domingo.

Trabajar con nombres completos de los días

Si tu base de datos usa una configuración regional donde los nombres abreviados de los días son distintos, o prefieres trabajar con los nombres completos, puedes modificar la consulta así:

SELECT employee_id, work_date
FROM employee_schedule
WHERE TO_CHAR(work_date, 'DAY') NOT IN ('SATURDAY', 'SUNDAY');

Resultado esperado:

EMPLOYEE_ID | WORK_DATE
------------|-----------
200         | 01-SEP-2023
201         | 02-SEP-2023
202         | 03-SEP-2023

Filtrar días hábiles entre dos fechas

Muchas veces vas a querer obtener registros entre dos fechas, pero solo de días hábiles. Así puedes extender la lógica para lograrlo.

Consulta de ejemplo: seleccionar días hábiles entre dos fechas

SELECT invoice_id, invoice_date
FROM invoices
WHERE invoice_date BETWEEN TO_DATE('2023-09-01', 'YYYY-MM-DD') 
                       AND TO_DATE('2023-09-10', 'YYYY-MM-DD')
AND TO_CHAR(invoice_date, 'DY') NOT IN ('SAT', 'SUN');

Resultado esperado:

INVOICE_ID | INVOICE_DATE
-----------|--------------
3001       | 01-SEP-2023
3005       | 04-SEP-2023
3007       | 05-SEP-2023
3010       | 06-SEP-2023

Manejo de distintos idiomas y configuraciones regionales

Oracle puede mostrar los nombres de los días según la configuración NLS (National Language Support) de tu sesión. Por ejemplo, si tu sesión está configurada en un idioma distinto al inglés, las abreviaturas como ‘MON’, ‘TUE’ pueden ser diferentes. Puedes revisar la configuración actual ejecutando:

SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_TERRITORY';

Si es necesario, puedes sobrescribir esta configuración a nivel de sesión para obtener resultados consistentes:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';

Esto establece el territorio en ‘AMERICA’, lo que garantiza que se usen nombres de días como ‘MON’, ‘TUE’, etc.

Uso de la función NEXT_DAY()

A veces querrás calcular el siguiente día de la semana a partir de una fecha dada. La función NEXT_DAY() de Oracle te ayuda a encontrar la siguiente ocurrencia de un día de la semana específico.

Consulta de ejemplo: encontrar el siguiente día hábil

SELECT NEXT_DAY(SYSDATE, 'MONDAY') AS next_monday
FROM dual;

Resultado esperado:

NEXT_MONDAY
------------
11-SEP-2023

En este caso, NEXT_DAY(SYSDATE, 'MONDAY') devuelve el siguiente ‘lunes’ después de la fecha actual.

Conclusión

Filtrar días hábiles en Oracle SQL es un requisito común en muchas aplicaciones. Con la función TO_CHAR() para extraer el día de la semana y excluir los fines de semana, puedes trabajar solo con días hábiles. En escenarios más complejos, puedes combinar funciones como NEXT_DAY() y rangos de fechas para crear consultas más sofisticadas.

Otros artículos que te pueden gustar:

Beekeeper Studio es un cliente de bases de datos gratuito y de código abierto

La mejor herramienta de consultas y edición de SQL que he usado. Tiene todo lo que necesito para administrar mi base de datos. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio es rápido, intuitivo y fácil de usar. Es compatible con muchísimas bases de datos y funciona de maravilla en Windows, Mac y Linux.

La versión de Beekeeper para Linux tiene el 100% de las funciones, sin recortes ni concesiones.

Lo que dicen los usuarios de Beekeeper Studio

★★★★★
"Beekeeper Studio reemplazó por completo mi antiguo flujo de trabajo con SQL. Es rápido, intuitivo y hace que trabajar con bases de datos vuelva a ser agradable."
— Alex K., desarrollador de bases de datos
★★★★★
"He probado muchas GUI de bases de datos, pero Beekeeper logra el equilibrio perfecto entre funciones y simplicidad. Simplemente funciona."
— Sarah M., ingeniera full stack

¿Listo para mejorar tu flujo de trabajo con SQL?

download Descarga gratis