Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak uzyskać dni robocze lub godziny między dwiema datami?

Nie możesz. To takie proste. Święta narodowe różnią się na całym świecie, zmieniają się z roku na rok, a dodatkowe można dodawać lub usuwać w dowolnym momencie. Dodatkowo niektóre jurysdykcje przenoszą święta państwowe, które przypadają w weekend i mają je w następnym tygodniu; inni nie.

Będziesz musiał stworzyć tabelę kalendarza i oznaczyć święta narodowe/weekendy itp.

Na przykład

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

Następnie wstaw do niego trochę danych...

 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

Na koniec ręcznie zaktualizuj to, co uważasz za święto narodowe.

Następnie możesz wybrać dni robocze, w zależności od tego, jak wypełniłeś je w ten sposób:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja LITAGG:wynik konkatenacji ciągów jest za długi

  2. Wywołaj funkcję pl/sql w javie?

  3. Dzielenie wartości oddzielonych przecinkami w Oracle

  4. C#:Obiekt nie może być rzutowany z DbNull na inne typy

  5. Jak wybrać z kolumny typu obiektu w Oracle 11g?