Det kan du ikke. Så enkelt er det. Nationale helligdage varierer verden over, de varierer år for år, og ekstra kan tilføjes eller tages væk til enhver tid. Derudover overfører nogle jurisdiktioner nationale helligdage, der falder i weekenden, og har dem den næste uge; andre gør ikke.
Du skal oprette en kalendertabel og markere nationale helligdage/weekender osv. i dette.
For eksempel
create table calender
( day date
, weekend varchar2(1)
, holiday varchar2(1)
);
Indsæt derefter nogle data i det...
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
Til sidst skal du manuelt opdatere, hvad du tæller som en national helligdag derinde.
Du kan derefter vælge arbejdsdage, afhængigt af hvordan du udfyldte det med noget som dette:
select count(*)
from calender
where day between :startdate and :enddate
and weekend = 'N'
and holiday = 'N'