dschingis1980 Geschrieben 25. Oktober 2010 Geschrieben 25. Oktober 2010 Hallo, Ich möchte in einer Oracle-Datenbank die Tage zwischen zwei Zeitpunkten ermitteln, z.B. 20.01.2010 - 05.01.2010. Soweit so gut, kein Problem. Allerdings hätte ich gerne die Tage ohne Wochenenden, also nur die Werktage. Habt ihr eine Idee, wie ich das hinbekomme? Danke für eure Unterstützung vorab, Philipp Zitieren
tennessee Geschrieben 25. Oktober 2010 Geschrieben 25. Oktober 2010 Hallo anbei eine eventuelle Möglichkeit im mysql Syntax auf die schnelle. where ....... and ( date_format (datum, "%d") not 6 or date_format (datum, "%d") not 7 ) Ich habe jetzt hier keine DB zur Verfügung aber 6 müsste Samstag und 7 und 0 Sonntag sein. Das date_format müsste es (oder eine ähnliche Funktion) auch unter Oracle geben eventuell syntaktisch anders. Zitieren
baba007 Geschrieben 25. Oktober 2010 Geschrieben 25. Oktober 2010 sowas ? define frdate = '&1' define todate = '&2' set verify off select '&frdate' From_Date ,'&todate' To_Date, 1 + to_date('&todate') - to_date('&frdate') - ( (TRUNC(to_date('&todate'),'D') - TRUNC(to_date('&frdate'),'D'))/7)*2 + DECODE(to_char(to_date('&todate'),'D'),7,-1,0) + DECODE(to_char(to_date('&frdate'),'D'),1,-1,0) Business_Days from dual Zitieren
dschingis1980 Geschrieben 26. Oktober 2010 Autor Geschrieben 26. Oktober 2010 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; Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.