• I had a need to do this some time ago. I implemented a well known algorithm from an English standards organization (I've forgotten exactly who).

    This is a little shorter than yours and has a pumpkin date associated with it (but it's a long way out).

    Here it is:

    CREATE function fn_Calc_Easter_Sunday(@iYear int)

    returns DateTime

    as

    begin

    Declare @iD int,

    @iE int,

    @iQ int,

    @iMonth int,

    @iDay int

    Select @iD = 255 - 11 * (@iYear % 19)

    If @iD > 50

    Select @iD = (@iD-21) % 30 + 21

    If @iD > 48

    Select @iD = @iD - 1

    Select @iE = (@iYear + @iYear/4 + @iD + 1) % 7

    Select @iQ = @iD + 7 - @iE;

    If @iQ < 32

    Begin

    Select @iMonth = 3

    Select @iDay = @iQ

    End

    Else

    Begin

    Select @iMonth = 4

    Select @iDay = @iQ - 31

    End

    RETURN (

    SELECT

    CONVERT(DATETIME, [Year] + REPLICATE('0', 2-LEN([Month])) + [Month] + REPLICATE('0', 2-LEN([Day])) + [Day])

    FROM

    (SELECT CAST(@iYear AS VARCHAR(4)) as [Year], CAST(@iMonth AS VARCHAR(2)) AS [Month], CAST(@iDay AS VARCHAR(2)) AS [Day]) a

    );

    End