Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment obtenir des jours ou des heures ouvrables entre deux dates

Vous ne pouvez pas. C'est aussi simple que ça. Les jours fériés nationaux varient dans le monde entier, ils varient d'année en année et des jours supplémentaires peuvent être ajoutés ou supprimés à tout moment. De plus, certaines juridictions reportent les jours fériés nationaux qui tombent le week-end et les ont la semaine suivante; d'autres non.

Vous devrez créer une table de calendrier et marquer les jours fériés / week-ends nationaux, etc.

Par exemple

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

Insérez-y ensuite des données...

 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

Enfin, mettez à jour manuellement ce que vous considérez comme un jour férié ici.

Vous pouvez ensuite sélectionner des jours ouvrables, en fonction de la façon dont vous l'avez rempli avec quelque chose comme ceci :

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