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

Cómo obtener días hábiles u horas entre dos fechas

no puedes Es tan simple como eso. Los días festivos nacionales varían en todo el mundo, varían año tras año y se pueden agregar o quitar otros adicionales en cualquier momento. Además, algunas jurisdicciones trasladan los feriados nacionales que caen en fin de semana y los celebran la semana siguiente; otros no.

Tendrá que crear una tabla de calendario y marcar los días festivos nacionales/fines de semana, etc. en esto.

Por ejemplo

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

Luego inserte algunos datos en él...

 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 último, actualice manualmente lo que cuenta como feriado nacional allí.

A continuación, puede seleccionar los días laborables, dependiendo de cómo lo haya rellenado con algo como esto:

select count(*)
  from calender
 where day between :startdate and :enddate
   and weekend = 'N'
   and holiday = 'N'