Ich habe jetzt selbst zwei Lösungen im Netz gefunden:
-- Möglichkeit 1
SELECT count(business_date) business_day
FROM (SELECT TO_DATE ('04.01.2010', 'dd.mm.yyyy')
+ ROWNUM
- 1 business_date
FROM all_objects
WHERE ROWNUM <= TO_DATE ('18.01.2010', 'dd.mm.yyyy') - TO_DATE ('04.01.2010', 'dd.mm.yyyy') + 1)
WHERE TO_CHAR (business_date, 'D') NOT IN ('6', '7');
-- Möglichkeit 2
CREATE OR REPLACE FUNCTION F_BUSINESS_DAYS(V_START_DATE IN DATE, V_END_DATE IN DATE) RETURN NUMBER IS DAY_COUNT NUMBER := 0;
CURR_DATE DATE;
BEGIN -- loop through and update
CURR_DATE := V_START_DATE;
WHILE CURR_DATE <= V_END_DATE
LOOP
--dbms_output.put_line(TO_CHAR(CURR_DATE,'DY'));
--dbms_output.put_line(TO_CHAR(CURR_DATE,'D'));
IF TO_CHAR(CURR_DATE,'D') NOT IN ('6','7') THEN
DAY_COUNT := DAY_COUNT + 1;
END IF;
CURR_DATE := CURR_DATE + 1;
END LOOP;
RETURN DAY_COUNT;
END F_BUSINESS_DAYS;