T-SQL: Funzione per calcolare la differenza tra due date in giorni lavorativi

/* Funzione creata per calcolare la differenza tra due date in termini di giorni lavorativi: */

CREATE FUNCTION dbo.DifferenzaDateGiorniLav (@Data1 AS DATE, @Data2 AS DATE)

RETURNS INT

AS

BEGIN

    DECLARE @DataVar as DATETIME, @Giorni as INT
    SET @DataVar=@Data2
    SET @Giorni=0
    
-- toglie un giorno alla volta fino a che raggiunge il numero di giorni richiesto    
    WHILE @DataVar > @Data1
    
    BEGIN
       SET @DataVar=DATEADD(d,-1,@DataVar)
       
-- se sabato o domenica toglie un altro giorno alla data senza aggiornare il
-- contatore
       IF DATEPART(dw,@DataVar)= 1 SET @DataVar=DATEADD(d,-1,@DataVar)
       IF DATEPART(dw,@DataVar)= 7 SET @DataVar=DATEADD(d,-1,@DataVar)
       
       SET @Giorni=@Giorni+1   
    END
  
    RETURN @Giorni

END

GO


/* E' utilizzabile al posto della DATEDIFF: */

SELECT Database.dbo.DifferenzaDateGiorniLav(GETDATE(), '2016-06-24')

/* Non tiene conto di eventuali giorni festivi infrasettimanali, per considerarli l'unica possibilità è crearsi una tabella con i giorni festivi da utilizzare poi nella funzione. Per la funzione per aggiungere giorni lavorativi vai qui. */


No comments:

Post a Comment