Ci siamo quasi, fra qualche giorno sarà Pasqua; ma esattamente quale giorno? E l'anno prossimo?
Beh, per risolvere questo esistenziale problema, potremmo ricorrere a questa semplice funzione.
/*
-- Author: Sandro Bizioli
-- Create date: 20070215
-- Description: Recupera la data del giorno di Pasqua per l'anno
-- indicato
-- Param: @Anno Anno di riperimento, se omesso il corrente.
-- Note: La funzione calcola il giorno di Pasqua per gli anni
-- dal 1900 al 2079
*/
CREATE FUNCTION fnEasterDay(@Anno as int = null)
RETURNS @myReturn TABLE (
EasterDay Smalldatetime null
)
AS
BEGIN
-- Verifico che l'anno sia corretto
set @anno = coalesce(@anno, year(getdate()))
if not @anno between 1900 and 2079
begin
insert into @myReturn values (null)
return
end
-- Imposto le variabili da utilizzare
declare @y int, @a int, @b int, @c int, @d int
declare @Easter as smalldatetime
set @y = @anno - 1900
set @a = (7 * (@y % 19) + 1) / 19
set @b = (11 * (@y % 19) + 4 - @a) % 29
set @c = (@y + @y / 4 + 31 - @b) % 7
set @d = 25 - @b - @c
If @d > 0
set @easter = convert(datetime, cast(@anno as char(4)) + '04' + substring('0' + cast(@d as char(2)),1,2), 112)
Else
set @easter = convert(smalldatetime, cast(@anno as char(4)) + '03' + substring('0' + cast(@d+31 as char(2)),1,2), 112)
-- Restituisco la tabella vera e propria
INSERT INTO @myReturn VALUES (@easter)
RETURN
END
GO
Una volta creata la nostra funzione basterà richiamarla indicando l'anno di riferimento. Se NULL viene preso l'anno corrente.
Select * From fnEasterDay(2007)
/* Output
EasterDay
-----------------------
2007-04-08 00:00:00
*/
Ah, dimenticavo. Quest'anno Pasqua è l'8 Aprile. Auguri a tutti.