Datum von Ostern errechnen
Im Netz gibt es viele Beispiele zum Errechnen des Ostersonntages; ein variabler Feiertag der „nach dem Mond“ geht, ebenso die Erläuterungen zur Formel, z.B. bei Wikipedia.
Hier nun die Umsetzung der Formel für den MS SQL Server mit einem T-SQL Script; das Ergebnis kann man z.B. mit der „Osterfesttabelle“ von der „Physikalisch-Technischen Bundesanstalt“ vergleichen.
-- Alte Version ggf. DROPen
IF OBJECT_ID (N'dbo.fnEasterSunday', N'FN') IS NOT NULL
DROP FUNCTION dbo.fnEasterSunday;
GO
CREATE FUNCTION dbo.fnEasterSunday(@Jahr smallint)
RETURNS datetime
AS
-- Autor: Olaf Helper
-- Stand: 30.03.2009
-- Typ: User Defined Function
-- Name: fnEasterSunday
-- Liefert zu einem Kalenderjahr das Datum von
-- Oster-Sonntag
BEGIN
DECLARE @a smallint, @b smallint,
@c smallint, @d smallint,
@e smallint, @o smallint,
@H1 smallint, @H2 smallint,
@N smallint, @M smallint
SET @a = @Jahr % 19;
SET @b = @Jahr % 4;
SET @c = @Jahr % 7
SET @H1 = @Jahr / 100;
SET @H2 = @Jahr / 400;
SET @N = 4 + @H1 - @H2;
SET @M = 15 + @H1 - @H2 - ((8 * @H1 + 13) / 25);
SET @d = (19 * @a + @M) % 30;
SET @e = (2 * @b + 4 * @c + 6 * @d + @N) % 7;
SET @o = 22 + @d + @e;
-- Ausnahmen
IF @o = 57
SET @o = 50;
IF (@d = 28) AND (@e = 6) AND (@a > 10)
SET @o = 49;
RETURN(DATEADD(d, @o - 1,
CONVERT(datetime,
CONVERT(char(4), @Jahr)
+ '0301')));
END;
GO
-- Kurzer Unit-Test = 23.03.2008
SELECT dbo.fnEasterSunday(2008)
GO
Diesen Post teilen
Um über die neuesten Artikel informiert zu werden, abonnieren:
Kommentiere diesen Post
C