Databases Reference
In-Depth Information
-- Bestimmung, ob ein gegebenes Datum ein Feiertag ist.
-- Derzeitige norddeutsche Version
-- Andere dürfen einige zusätzliche Eintragungen vornehmen.
-- Achtung! Sensibel gegen Gesetzesänderungen
-- Rückgabe: 0 -> kein Feiertag
-- 1 -> Feiertag
CREATE FUNCTION feiertag (dat DATE) RETURNS SMALLINT
BEGIN
DECLARE diff SMALLINT; -- Differenz zu Ostern
DECLARE tag SMALLINT; -- Tag des Datums
DECLARE monat SMALLINT; -- Monat des Datums
SET diff = dat - ostern(YEAR(dat));
SET tag = DAY(dat);
SET monat = MONTH(dat);
IF tag = 1 AND monat = 1 -- Neujahr
OR tag = 1 AND monat = 5 -- 1. Mai
OR tag = 3 AND monat = 10 -- Tag der Deutschen Einheit
OR tag = 25 AND monat = 12 -- 1. Weihnachtstag
OR tag = 26 AND monat = 12 -- 2. Weihnachtstag
OR diff = -2 -- Karfreitag
OR diff = 0 -- Ostersonntag
OR diff = 1 -- Ostermontag
OR diff = 39 -- Himmelfahrtstag
OR diff = 49 -- Pfingstsonntag
OR diff = 50 -- Pfingstmontag
THEN RETURN 1
ELSE RETURN 0
END IF
END;
Hieraus lässt sich jetzt die Funktion ableiten, die für einen Tag bestimmt, welcher
Ta g i n n Werktagen (ohne Samstag) sein wird.
-- Bestimmung des Tages, der n Werktage (Montag bis
-- Freitag, kein Feiertag) nach dem gegebenen Datum liegt.
-- Argumente:
-- dat Anfangsdatum ; muss kein Werktag sein
-- n Anzahl Tage ; muss >= 0 sein.
CREATE FUNCTION add_werktage (dat DATE, n SMALLINT)
RETURNS DATE
BEGIN
DECLARE neudat DATE;
DECLARE rest SMALLINT;
SET neudat = dat;
SET rest = n;
Search WWH ::




Custom Search