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
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