Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Nächster Geschäftstag (Montag - Freitag) in Oracle?

Diese Dinge werden normalerweise mit einer Tabelle erledigt, die alle Arbeitstage eines Jahres auflistet, und nicht mit einer naiven Formel wie:

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)

Wenn Sie eine Tabelle verwenden, können Sie Dinge wie Feiertage, nationale Feiertage, religiöse Feste, Abstimmungstage, Trauertage, ad hoc freie Tage, die aus geschäftlichen oder politischen Gründen usw. auftreten können, usw. berücksichtigen. Die Pflege der Tabelle wird dann zu einer wichtigen Aufgabe. Das Abrufen des nächsten Arbeitstages ist im Wesentlichen ein Fall, in dem die Tabelle nach dem MIN(date) abgefragt wird WHERE date > current_date