dbo.DiaHabilMesActual

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

2
Name Data Type Length Description
(Result) date 3
@NDAYS int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
CREATE OR ALTER FUNCTION dbo.DiaHabilMesActual (@NDAYS INT)
returns date
  BEGIN
/*

DEVUELVE LA FECHA DEL XX DIA HABIL DEL MES EN CURSO 

select dbo.BusinessDays('2021-11-01','2021-11-30')

select dbo.DiasHabilesADD('2021-12-01',5)
select dbo.DiaHabilMesActual(5)
select DATEPART(dw,getdate()-1) as weekday

*/

 DECLARE @DATE datetime
 DECLARE @DATE2 datetime = getdate()
 SET @DATE= DATEADD(DAY, 1, EOMONTH(@DATE2, -1))

      IF @DATE IS NULL
        BEGIN
            RETURN NULL;
        END
          DECLARE @STARTDATE INT = 0
      DECLARE @COUNT INT = 0
      DECLARE @NEWDATE DATE=Dateadd(day, 1, @DATE)
      WHILE @COUNT < @NDAYS
        BEGIN
            IF Datepart(weekday, @NEWDATE) NOT IN (1,7) /* excluímos los domingos y sábados*/
               AND @NEWDATE NOT IN (SELECT fecha_feriado   FROM   feriados) /* excluímos los feriados*/
              SET @COUNT += 1;

            SELECT @NEWDATE = Dateadd(day, 1, @NEWDATE),
                   @STARTDATE += 1;
        END

      RETURN Dateadd(day, @STARTDATE, @DATE);
  END
GO