sql >> Database >  >> RDS >> Oracle

Hoe u werkdagen of uren tussen twee datums kunt krijgen

Dat kan niet. Zo simpel is het. Nationale feestdagen variëren over de hele wereld, ze variëren van jaar tot jaar en er kunnen op elk moment extra worden toegevoegd of weggenomen. Bovendien dragen sommige rechtsgebieden nationale feestdagen die in het weekend vallen over en hebben ze de volgende week; anderen niet.

U moet een kalendertabel maken en hierin nationale feestdagen/weekends enz. markeren.

Bijvoorbeeld

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

Voeg er dan wat gegevens in...

 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

Werk ten slotte handmatig bij wat u daar als nationale feestdag beschouwt.

Je kunt dan werkdagen selecteren, afhankelijk van hoe je het hebt ingevuld met zoiets als dit:

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


  1. Fix Msg 529 "Expliciete conversie van gegevenstype int naar xml is niet toegestaan" in SQL Server

  2. DAY() Voorbeelden – MySQL

  3. SQLite AVG

  4. Begrijp groep per clausule in SQL Server - SQL Server / TSQL-zelfstudie, deel 130