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
Werbung
Diesen Post teilen
Um über die neuesten Artikel informiert zu werden, abonnieren:
Kommentiere diesen Post
C