dbo.AdicionarDiasFecha

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

5
Name Data Type Length Description
(Result) datetime 8
@fecha_start datetime 8
@dias int 4
@ignora_feriados bit 1
@lista_feriados varchar -1

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE OR ALTER FUNCTION dbo.AdicionarDiasFecha 
(
 @fecha_start     datetime,
 @dias       int = 1,
 @ignora_feriados    bit = 0,
 @lista_feriados     varchar(MAX) = '2017-02-27,2017-02-28,2017-03-24,2017-04-02,2017-04-13,2017-04-14,2017-05-01,2017-06-17,2017-06-20' 
)
RETURNS DATETIME
AS
BEGIN
 -- Declare the return variable here
 DECLARE @f1 DATETIME
 DECLARE @added int = 0
 DECLARE @dia DATETIME = CONVERT(DATE,@fecha_start,121)
 
 WHILE @added < @dias BEGIN

  IF(DATEPART(dw, @dia) > 1 AND DATEPART(dw, @dia) < 7) BEGIN
   IF @ignora_feriados = 0 BEGIN

    IF (SELECT COUNT(*) FROM dbo.DelimitedSplit8K(@lista_feriados,',') ff WHERE ff.item = CONVERT(VARCHAR,CONVERT(DATE,@dia,121),121)) = 0 BEGIN
     SET @added = @added + 1
    END

   END ELSE BEGIN
    SET @added = @added + 1
   END

  END

  SET @dia = DATEADD(day, 1, @dia)
 END

 SET @f1 = DATEADD(SECOND, -1, @dia)

 -- Return the result of the function
 RETURN @F1

END
GO