Nie możesz. To takie proste. Święta narodowe różnią się na całym świecie, zmieniają się z roku na rok, a dodatkowe można dodawać lub usuwać w dowolnym momencie. Dodatkowo niektóre jurysdykcje przenoszą święta państwowe, które przypadają w weekend i mają je w następnym tygodniu; inni nie.
Będziesz musiał stworzyć tabelę kalendarza i oznaczyć święta narodowe/weekendy itp.
Na przykład
create table calender
( day date
, weekend varchar2(1)
, holiday varchar2(1)
);
Następnie wstaw do niego trochę danych...
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
Na koniec ręcznie zaktualizuj to, co uważasz za święto narodowe.
Następnie możesz wybrać dni robocze, w zależności od tego, jak wypełniłeś je w ten sposób:
select count(*)
from calender
where day between :startdate and :enddate
and weekend = 'N'
and holiday = 'N'