Uno dei problemi che ogni programmatore di applicativi business deve sempre affrontare è quello della gestione del calendario. Per riuscire a calcolare i giorni lavorativi è necessario conoscere le festività e tra queste l’unica festività che cambia ogni anno è pasquetta.

Come possiamo risolvere il problema?

Esistono svariate possibilità ma una di quelle che mi amo maggiormente è l’utilizzo di una funzione SQLSERVER. E’ velocissima e può essere integrata facilmente all’interno di View o Stored procedure.

CREATE FUNCTION Pasqua
                (@Anno INT) 
RETURNS SMALLDATETIME
AS 
BEGIN 
    DECLARE @EpactCalc INT,  
        @PaschalGiorniCalc INT, 
        @NumDiGiorniAllaDomenica INT, 
        @PasquaMese INT, 
        @PasquaGiorno INT 

    SET @EpactCalc = (24 + 19 * (@Anno % 19)) % 30 
    SET @PaschalGiorniCalc = @EpactCalc - (@EpactCalc / 28) 
    SET @NumDiGiorniAllaDomenica = @PaschalGiorniCalc - ( 
        (@Anno + @Anno / 4 + @PaschalGiorniCalc - 13) % 7 
    ) 

    SET @PasquaMese = 3 + (@NumDiGiorniAllaDomenica + 40) / 44 

    SET @PasquaGiorno = @NumDiGiorniAllaDomenica + 28 - ( 
        31 * (@PasquaMese / 4) 
    ) 

    RETURN 
    ( 
        SELECT CONVERT 
        (  SMALLDATETIME, 
                 RTRIM(@Anno)  
            + RIGHT('0'+RTRIM(@PasquaMese), 2)  
            + RIGHT('0'+RTRIM(@PasquaGiorno), 2)  
		)
    ) 
END

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *