La función recibe una fecha inicial, y un numero de días los cuales se les va sumar a la fecha inicial, para calcular los días festivos se ocupa una tabla configuration.diasfestivos, si les es de utilidad la tabla comenten para que les pase el script
CREATE FUNCTION dbo.[CalcularFechaConDiasFestivosYDomingos]
(
@Fecha datetime,
@noDias int
)
RETURNS datetime
as
begin
declare
@resFecha datetime
declare
@FeFin datetime
declare
@result int
declare
@DiasFeriados int
declare
@noDomingos int
declare
@Correcto int
--set
@ini = '2016-09-01'
--set
@fin = '2016-09-30'
set
@FeFin =DATEADD(DAY,@noDias,@Fecha)
set
@noDomingos =( Select (datediff(day,@Fecha,@FeFin)-DATEPART(dw,@FeFin)+8)/7)
--select
* from configuration.diasfestivos
set
@DiasFeriados =( select
COUNT(1) FROM configuration.diasfestivos WHERE
fedia >= @Fecha AND
fedia <= @FeFin)
set
@Correcto =0
set
@result = @noDomingos+@DiasFeriados
set
@resFecha = dateadd(DAY,@result,@FeFin)
/*WHILE
(@varfecha<>(@FechaFinal + 1)) */
WHILE (@Correcto =0)
BEGIN
IF (DATEPART(dw,@resFecha) IN (1))
BEGIN
SET
@resFecha =DATEADD(dd,1,@resFecha)
SET
@Correcto =0
END
ELSE
begin
IF (select COUNT(1) FROM configuration.diasfestivos WHERE
fedia = @resFecha)=1
BEGIN
SET @resFecha =DATEADD(dd,1,@resFecha)
SET @Correcto =0
END
ELSE
BEGIN
SET @Correcto =1
END
end
END
return
@resFecha
end
---------------------------------
Script para creación de tabla días festivos.
CREATE SCHEMA [Configuration]
GO
/****** Object: Table [Configuration].[DiasFestivos] Script Date: 21/05/2018 04:29:30 p. m.
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [Configuration].[DiasFestivos](
[idDiaFestivo]
[int] IDENTITY(1,1) NOT NULL,
[dsDiaFestivo]
[nvarchar](100) NULL,
[feDia]
[datetime] NULL,
[esActivo]
[bit] NULL,
CONSTRAINT [PK_DIASFESTIVOS] PRIMARY KEY CLUSTERED
(
[idDiaFestivo]
ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [Configuration].[DiasFestivos] ADD DEFAULT ((0)) FOR [esActivo]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Dias Festivos ' , @level0type=N'SCHEMA',@level0name=N'Configuration', @level1type=N'TABLE',@level1name=N'DiasFestivos'
GO
Hola compañero, tendrás la tabla de configuración que me la proporciones a noeguma@gmail.com ? gracias anticipadas.
ResponderEliminarMil gracias
ResponderEliminarBuenas hermano, manda, y muchas gracias...
ResponderEliminarBuenas puedes pasar el script, muchas gracias
ResponderEliminarCompañero me puedes pasar la tabla y algunos ejemplos de inserción, es muy bueno tu aporte gracias
ResponderEliminar