Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Próximo dia útil (segunda a sexta) na Oracle?


Essas coisas normalmente são feitas com uma tabela que lista todos os dias úteis em um ano, em vez de uma fórmula ingênua 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)

O uso de uma tabela permite que você leve em consideração coisas como feriados bancários, feriados nacionais, festivais religiosos, dias de votação, dias de luto, dias de folga ad hoc que podem ocorrer por motivos empresariais ou políticos, etc etc. Manter a tabela torna-se uma tarefa importante. Recuperar o próximo dia útil é essencialmente um caso de consultar a tabela para o MIN(date) WHERE date > current_date