Тези неща обикновено се правят с таблица, която изброява всички работни дни в годината, а не с наивна формула като:
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)
Използването на таблица ви позволява да вземете предвид неща като официални празници, национални празници, религиозни фестивали, дни на гласуване, дни на траур, ad hoc почивни дни, които могат да възникнат поради фирмени или политически причини и т.н. и т.н. След това поддържането на таблицата се превръща във важна задача. Извличането на следващия работен ден е по същество случай на запитване към таблицата за MIN(date)
WHERE date > current_date