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

Næste arbejdsdag (mandag - fredag) i Oracle?

Disse ting udføres normalt med en tabel, der viser alle arbejdsdage i et år i stedet for en naiv formel som:

CASE WHEN (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) < 5 
  THEN 1 + (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) 
  ELSE 1 
END --(on monday to thursday this returns 2 to 5, on fri/sat/sun this returns 1)

CASE WHEN (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) < 5 
  THEN TRUNC (SYSDATE) + 1 
  ELSE TRUNC (SYSDATE + 4), 'IW')  
END --(on monday to thursday this returns tomorrow's date, on fri/sat/sun it returns next monday's date)

Ved at bruge en tabel kan du tage højde for ting som helligdage, nationale helligdage, religiøse højtider, afstemningsdage, sørgedage, ad hoc fridage, der kan opstå af firma eller politiske årsager osv. osv. Vedligeholdelse af tabellen bliver så en vigtig opgave. Hentning af den næste arbejdsdag er i bund og grund et tilfælde af forespørgsel i tabellen for MIN(date) WHERE date > current_date



  1. Sammenlægning af datafiler med Statistica, del 1

  2. Opdater alle rækker i en kolonne til ny værdi

  3. MySQl, join/flet 2 tabeller uden delt kolonne og bestilling efter en fælles kolonne

  4. En SQL-forespørgsel, der skal vælges, indtil SUM(brugerantal) når 1000