Hace poco realicé un procedimiento almacenado (para una aplicación que estaba desarrollando) que recibía como parámetros los días de la semana y un rango de fecha, como resultado me devolvía las o la fecha de los días que le pasaba como parámetro. Por ejemplo:
Rango de fechas: 12/06/2016 al 23/06/2016
Días: Lunes, Miércoles
Entonces el resultado sería todos las fecha de los días lunes y miércoles que se encuentran dentro del rango de fecha.
Resultado: 13/06/2016 - 15/06/2016 - 20/06/2016 - 22/06/2016
Para este ejemplo vamos a hacer uso de varias funciones por ejemplo DateDiff, DateAdd y DateName.
Procedimiento
- Obtener la cantidad de días que hay dentro del rango de fechas.
- Dentro del ciclo while iterar hasta que se cumpla la condición.
Ahora les comparto el query
create procedure Fecha_RangoFechas @lunes varchar(20) = null, @martes varchar(20) = null, @miercoles varchar(20) = null, @jueves varchar(20) = null, @viernes varchar(20) = null, @fecha_desde datetime, @fecha_hasta datetime as begin declare @cantdias int ,@i int ,@fecha datetime ,@dia varchar(20) set @cantdias = datediff (day, @fecha_desde, @fecha_hasta) set @i = 0 while @i <= @cantdias begin set @fecha = DATEADD(day, @i, @fecha_desde) set @dia = DATENAME(WEEKDAY, @fecha) if (@lunes is not null and @lunes = @dia ) select convert(varchar(20), @fecha, 103) if (@martes is not null and @martes = @dia ) select convert(varchar(20), @fecha, 103) if (@miercoles is not null and @miercoles = @dia ) select convert(varchar(20), @fecha, 103) if (@jueves is not null and @jueves = @dia ) select convert(varchar(20), @fecha, 103) if (@viernes is not null and @viernes = @dia ) select convert(varchar(20), @fecha, 103) set @i = @i + 1 end end
/*Ahora probemos*/
--[dbo].[Fecha_RangoFechas] 'Lunes', null, 'Miércoles', null, null, '12/06/2016', '23/06/2016'
--[dbo].[Fecha_RangoFechas] 'Lunes', 'Martes', 'Miércoles', null, null, '12/06/2016', '23/06/2016'
No hay comentarios:
Publicar un comentario