Wednesday, December 11, 2013

Cuántos domingos hay en un rango de fecha - Query

La pregunta es cómo determinar, dado un rango de fechas, cuántos días domingos hay.
SQL Server no tiene una función propia como tal, así que podemos utilizar la siguiente
función la cual le enviamos el rango de fechas. 
 
 
 CREATE FUNCTION fncCuantosDomingosHay (@inicio DATETIME, @fin DATETIME)
  RETURNS integer
  AS
  BEGIN
  DECLARE @dia_sem INT
  DECLARE @domingos INT
  DECLARE @fecha datetime
   
  SET @fecha=@inicio
  SET @domingos=0
  while @fecha <= @fin
  BEGIN    
   SELECT @dia_sem=datepart(weekday,@fecha) 
   IF @dia_sem=1
     SET @domingos=@domingos+1    
   SELECT @fecha=dateadd(dd,1,@fecha)     
  END
  return @domingos
    END


--EJECUTAMOS LA FUNCIÓN

declare @total integer

exec @total= fncCuantosDomingosHay '2013/10/16','2013/11/15'

print @total

--Resultado: 4

2 comments:

  1. buen aporte me ayudo en mi trabajo.... mas bien lo modifique para que funcione para todos los días de la semana

    ReplyDelete
  2. Aquí les dejo el código modificado

    CREATE FUNCTION fncCuantosDiasHay (@inicio DATETIME, @fin DATETIME,@dia_sem2 int)
    RETURNS integer
    AS
    BEGIN
    DECLARE @dia_sem INT
    DECLARE @dia INT
    DECLARE @fecha datetime

    SET @fecha=@inicio
    SET @dia=0
    while @fecha <= @fin
    BEGIN
    SELECT @dia_sem=datepart(weekday,@fecha)
    IF @dia_sem=@dia_sem2
    SET @dia=@dia+1
    SELECT @fecha=dateadd(dd,1,@fecha)
    END
    return @dia
    END


    --EJECUTAMOS LA FUNCIÓN

    declare @total integer
    exec @total= fncCuantosDiasHay '01/12/2014','09/12/2014',3
    print @total

    Resultado 1 por que el ultimo valor me indica que día quiero consultar
    1 -> Lunes
    2 -> Martes
    3 -> Miercoles
    4 -> Jueves
    5 -> Viernes
    6 -> Sábado
    7 -> Domingo

    ReplyDelete