sql >> Databasteknik >  >> RDS >> Oracle

Hur man får arbetsdagar eller timmar mellan två datum

Du kan inte. Så enkelt är det. Nationella helgdagar varierar över hela världen, de varierar från år till år och extra helgdagar kan läggas till eller tas bort när som helst. Vissa jurisdiktioner överför dessutom nationella helgdagar som infaller på helgen och har dem nästa vecka; andra gör det inte.

Du måste skapa en kalendertabell och flagga nationella helgdagar/helger etc i detta.

Till exempel

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

Infoga sedan lite data i den...

 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

Slutligen, uppdatera manuellt vad du räknar som en nationell helgdag där inne.

Du kan sedan välja arbetsdagar, beroende på hur du fyllde den med något i stil med detta:

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


  1. node.js mysql-fel:ECONNREFUSED

  2. Hur skapar jag en främmande nyckel i SQL Server?

  3. Spåra signaler med en signalbearbetningsdatamodell

  4. Ändra en inloggnings standardspråk i SQL Server