Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So erhalten Sie Werktage oder Stunden zwischen zwei Daten

Du kannst nicht. So einfach ist das. Nationale Feiertage sind weltweit unterschiedlich, sie variieren von Jahr zu Jahr und zusätzliche Feiertage können jederzeit hinzugefügt oder entfernt werden. Darüber hinaus übertragen einige Gerichtsbarkeiten nationale Feiertage, die auf das Wochenende fallen, und haben sie in der nächsten Woche. andere nicht.

Sie müssen eine Kalendertabelle erstellen und darin nationale Feiertage / Wochenenden usw. markieren.

Zum Beispiel

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

Dann fügen Sie einige Daten ein...

 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

Aktualisieren Sie zuletzt manuell, was Sie dort als Nationalfeiertag zählen.

Sie können dann Arbeitstage auswählen, je nachdem, wie Sie sie etwa so ausgefüllt haben:

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