Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

Datum von Ostern errechnen

30. März 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

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

Repost 0

Kommentiere diesen Post