sql >> Base de Datos >  >> RDS >> Oracle

¿Siguiente día hábil (de lunes a viernes) en Oracle?

Estas cosas normalmente se hacen con una tabla que enumera todos los días hábiles en un año en lugar de una fórmula ingenua como:

CASE WHEN (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) < 5 
  THEN 1 + (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) 
  ELSE 1 
END --(on monday to thursday this returns 2 to 5, on fri/sat/sun this returns 1)

CASE WHEN (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) < 5 
  THEN TRUNC (SYSDATE) + 1 
  ELSE TRUNC (SYSDATE + 4), 'IW')  
END --(on monday to thursday this returns tomorrow's date, on fri/sat/sun it returns next monday's date)

El uso de una tabla le permite tener en cuenta cosas como feriados bancarios, feriados nacionales, festivales religiosos, días de votación, días de luto, días libres ad hoc que pueden ocurrir por razones políticas o de la empresa, etc. Mantener la tabla se convierte en una tarea importante. Recuperar el siguiente día hábil es esencialmente un caso de consultar la tabla para el MIN(date) WHERE date > current_date