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

Como obter dias ou horas úteis entre duas datas


Você não pode. É simples assim. Os feriados nacionais variam em todo o mundo, variam ano a ano e os feriados extras podem ser adicionados ou retirados a qualquer momento. Além disso, algumas jurisdições transferem feriados nacionais que caem no fim de semana e os têm na semana seguinte; outros não.

Você precisará criar uma tabela de calendário e sinalizar feriados nacionais / fins de semana etc.

Por exemplo
create table calender
  ( day date
  , weekend varchar2(1)
  , holiday varchar2(1)
    );

Em seguida, insira alguns dados nele ...
 insert into calender (day, weekend)
 select trunc(sysdate + level)
      , case when to_date(sysdate + level,'fmDAY') in ('SATURDAY','SUNDAY') 
                  then 'Y' else 'N' end
   from dual
connect by level <= 365

Por fim, atualize manualmente o que você conta como feriado nacional lá.

Você pode selecionar dias úteis, dependendo de como você o preencheu com algo assim:
select count(*)
  from calender
 where day between :startdate and :enddate
   and weekend = 'N'
   and holiday = 'N'