dbo.Imperium_SLA_Days

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Null on Null Input

False

Schema Bound

False

Assembly

Parameters

3
Name Data Type Length Description
(Result) datetime 8
@fromDate datetime 8
@daysToAdd int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
CREATE OR ALTER FUNCTION dbo.Imperium_SLA_Days
(@fromDate datetime,@daysToAdd INT)

RETURNS DATETIME
AS 

begin
DECLARE @SLADay DATETIME
/*
select @fromDate = getdate(),@DaysToAdd = 3
*/

declare @Saturday int
select @Saturday = DATEPART(weekday,@fromDate)

;with Numbers as (
    select 0 as n union all select 1 union all select 2 union all select 3 union all select 4
), Split as (
    select @DaysToAdd%5 as PartialDays,@DaysToAdd/5 as WeeksToAdd
), WeekendCheck as (
    select WeeksToAdd,PartialDays,MAX(CASE WHEN DATEPART(weekday,DATEADD(day,n.n,@fromDate))=@Saturday THEN 1 ELSE 0 END) as HitWeekend
    from
    Split t
        left join
    Numbers n
        on
            t.PartialDays >= n.n
group by WeeksToAdd,PartialDays
)

select @SLADay= DATEADD(day,WeeksToAdd*7+PartialDays+CASE WHEN HitWeekend=1 THEN 2 ELSE 0 END,@fromDate) from WeekendCheck

RETURN @SLADay
end
GO