sql >> Database teknologi >  >> RDS >> Oracle

Sådan får du hverdage eller timer mellem to datoer

Det kan du ikke. Så enkelt er det. Nationale helligdage varierer verden over, de varierer år for år, og ekstra kan tilføjes eller tages væk til enhver tid. Derudover overfører nogle jurisdiktioner nationale helligdage, der falder i weekenden, og har dem den næste uge; andre gør ikke.

Du skal oprette en kalendertabel og markere nationale helligdage/weekender osv. i dette.

For eksempel

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

Indsæt derefter nogle data i det...

 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

Til sidst skal du manuelt opdatere, hvad du tæller som en national helligdag derinde.

Du kan derefter vælge arbejdsdage, afhængigt af hvordan du udfyldte det med noget som dette:

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


  1. PostgreSQL Autoincrement

  2. Forbindelse nægtet (PGError) (postgresql og rails)

  3. tilføj kolonne til mysql-tabellen, hvis den ikke eksisterer

  4. LEFT JOIN vs. LEFT OUTER JOIN i SQL Server