Oracle
 sql >> Database >  >> RDS >> Oracle

Come ottenere giorni o orari lavorativi tra due date

Non puoi. E 'così semplice. Le festività nazionali variano in tutto il mondo, variano di anno in anno e altre possono essere aggiunte o tolte in qualsiasi momento. Inoltre, alcune giurisdizioni riportano le festività nazionali che cadono nel fine settimana e le hanno la settimana successiva; altri no.

Dovrai creare una tabella del calendario e contrassegnare le festività nazionali / i fine settimana, ecc. In questo.

Ad esempio

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

Quindi inserisci dei dati al suo interno...

 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

Infine, aggiorna manualmente ciò che consideri una festa nazionale lì dentro.

Puoi quindi selezionare i giorni lavorativi, a seconda di come lo hai popolato con qualcosa di simile a questo:

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