sql >> Databáze >  >> RDS >> Oracle

Jak získat pracovní dny nebo hodiny mezi dvěma daty

Nemůžeš. Je to tak jednoduché. Státní svátky se po celém světě liší, liší se rok od roku a navíc lze kdykoli přidat nebo odebrat. Některé jurisdikce navíc přenášejí státní svátky, které připadají na víkend, a mají je příští týden; ostatní ne.

Budete muset vytvořit tabulku kalendáře a označit státní svátky / víkendy atd.

Například

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

Pak do něj vložte nějaká data...

 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

Nakonec ručně aktualizujte, co tam považujete za státní svátek.

Poté můžete vybrat pracovní dny v závislosti na tom, jak jste jej naplnili něčím takovým:

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


  1. 10 zkratek, které šetří čas v aplikaci Microsoft Access

  2. Co mají Poker, Blackjack, Belot a Préférence společného s databázemi?

  3. Výhody výkonu SQL Server 2016 Enterprise Edition

  4. Seskupit podle měsíce a roku v MySQL