domingo, 5 de noviembre de 2017

Función SQL para determinar fecha con Días festivos y Domingos

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




5 comentarios:

  1. Hola compañero, tendrás la tabla de configuración que me la proporciones a noeguma@gmail.com ? gracias anticipadas.

    ResponderEliminar
  2. Buenas hermano, manda, y muchas gracias...

    ResponderEliminar
  3. Buenas puedes pasar el script, muchas gracias

    ResponderEliminar
  4. Compañero me puedes pasar la tabla y algunos ejemplos de inserción, es muy bueno tu aporte gracias

    ResponderEliminar

Comenta cualquier duda o recomendatorio.