Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Calcular cantidad de dias lunes de fecha uno a fecha dos

Estas en el tema de Calcular cantidad de dias lunes de fecha uno a fecha dos en el foro de SQL Server en Foros del Web. HOlas, necesito calcular la cantidad de dias lunes que hay desde una fecha a otra. Cualquier ayuda seria bienvenida. saludos!!!!!!!! ayuda plis !!!...
  #1 (permalink)  
Antiguo 14/08/2009, 09:41
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 8 meses
Puntos: 16
Calcular cantidad de dias lunes de fecha uno a fecha dos

HOlas, necesito calcular la cantidad de dias lunes que hay desde una fecha a otra.
Cualquier ayuda seria bienvenida.

saludos!!!!!!!!



ayuda plis !!!
  #2 (permalink)  
Antiguo 14/08/2009, 10:19
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Que tal.

Un aprox es que cada 7 días seguro hay un lunes. Enonces divides los dias de diferencia entre las dos fechas y divides entre 7 y ya tienes una parte. Sino hay residuo entonces ya esta.

Pero si hay residuo tienes que ver otras cuestiones como saber en que día empieza la semana para tí.

Saludos.
  #3 (permalink)  
Antiguo 14/08/2009, 13:11
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Asi es..

Espero te sirva para iniciar..

Código:
SET DATEFIRST 1

DECLARE @FechaInicial datetime, @FechaFinal datetime, @Add int

SET @FechaInicial = '20090814' 
SET @FechaFinal = '20090831'
SET @Add = 1

IF  DATEPART(dw, @FechaFinal) <> 1 
    SET @FechaFinal = dateadd(dd, 1 -DATEPART(dw, @FechaFinal), @FechaFinal) 

IF  DATEPART(dw, @FechaInicial) <> 1
    SET @FechaInicial = dateadd(dd, 8 - DATEPART(dw, @FechaInicial), @FechaInicial) 

IF DATEDIFF(dd, @FechaInicial, @FechaFinal) < 0
BEGIN
    SET @Add = 0
    SET @FechaFinal = @FechaInicial
END


SELECT DATEDIFF(ww, @FechaInicial, @FechaFinal) + @Add AS MondaysCount
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 14/08/2009, 15:00
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Bueno, esta es mi version:
Código sql:
Ver original
  1. ALTER FUNCTION CuantosDiasSemana
  2. (
  3. @FechaInicio datetime,
  4. @FechaFin datetime,
  5. @DiaSemana tinyint = 1
  6. )
  7. RETURNS INT
  8. AS
  9. BEGIN
  10.  
  11. IF @FechaInicio > @FechaFin RETURN 0
  12.  
  13. DECLARE @RangoFechas TABLE(fecha datetime)
  14. DECLARE @Dia datetime
  15.  
  16. SET @Dia = @FechaInicio
  17.  
  18. while @Dia <= @FechaFin
  19. BEGIN
  20.     INSERT INTO @RangoFechas
  21.     SELECT @Dia
  22.  
  23.     SET @Dia = @Dia + 1
  24. END
  25.  
  26. RETURN (
  27.     SELECT SUM(CASE WHEN datepart(weekday, fecha) = @DiaSemana THEN 1 ELSE 0 END)
  28.     FROM @RangoFechas
  29. )
  30.  
  31. END
El llamado:
Código sql:
Ver original
  1. DECLARE @Dia1 INT
  2.  
  3. SET @Dia1 = @@DATEFIRST
  4.  
  5. SET DATEFIRST 1
  6.  
  7. SELECT dbo.CuantosDiasSemana('20090817','20090831',7)
  8.  
  9. SET DATEFIRST @Dia1
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 14/08/2009, 15:29
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Aunque no me gusta trabajar con ciclos, ya que la funcion la aplicas n veces segun el numero de dias que halla en el rango, incluso creo que se puede evitar el insert..



Código:
alter FUNCTION CuantosDiasSemana(@FechaInicio datetime,@FechaFin datetime,@DiaSemana tinyint = 1)
returns int
AS

begin 

IF @FechaInicio > @FechaFin 
	RETURN 0 
	
DECLARE @icuenta int

SET @icuenta = 0

while @FechaInicio <= @FechaFin    
BEGIN
	IF DATEPART(WEEKDAY, @FechaInicio) = @DiaSemana
		SET @icuenta = @icuenta + 1
		
	SET @FechaInicio = @FechaInicio + 1		
END
	
RETURN @icuenta

END

Como comentario, fijate que en el server tengo una tabla con las fechas por dia y rangos de semana, meses...mismas que me son de mucha utilidad cuando requiero por ejemplo hacer cortes, o contar cosas como estas...

no tengo que andar insertando porque ya esta ahi la info..





Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #6 (permalink)  
Antiguo 14/08/2009, 15:42
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Je, je.. por pensar en el select que suma los dias lunes olvidé mejorar el ciclo.
Gracias por la mejora.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 14/08/2009, 21:33
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Bueno, veo que finalmente si hubieron respuestas a la duda inicial de muzztein, él pasó por el foro de ASP y ahí también obtuvo una respuesta en T-SQL, lo comento por si alguien más encuentra este hilo en un futuro y le sirve.

Saludos
  #8 (permalink)  
Antiguo 17/08/2009, 06:28
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

jejeje



espero que si..

Edit:

Aunque al probar el script obtuve un resultado no esperado...

Tal vez entendi mal la pregunta...ya que me dice que solo hay 2 lunes entre el 14 de agosto y el Primero de septiembre...


Código:
DECLARE @FechaIni datetime,
        @FechaFin datetime,
        @FechaActual datetime,
        @FechaLunes datetime,
        @NumLunes int
SET @FechaIni = '20090814' 
SET @FechaFin = '20090901'
SET @FechaActual = @FechaIni
SET @NumLunes = 0

SELECT @FechaIni, @FechaFin

WHILE @FechaActual < @FechaFin
BEGIN
    SELECT @FechaLunes = DATEADD(wk, DATEDIFF(wk,0,@FechaActual), 0)    
    IF @FechaLunes > @FechaIni
    BEGIN
       SET @NumLunes = @NumLunes + 1
       --PRINT CAST(@NumLunes as varchar) + ') '+ CAST(@FechaLunes as varchar)
    END
    SELECT @FechaActual = DATEADD(Week, 1, @FechaActual) 
END

select @NumLunes


                                                             
------------------------ -------------------------
2009-08-14 00:00:00.000  2009-09-01 00:00:00.000

(1 row(s) affected)

            
----------- 
2

(1 row(s) affected)
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 17/08/2009 a las 06:36
  #9 (permalink)  
Antiguo 17/08/2009, 17:10
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Hola Andres95, gracias por hacerme notar ese error de lógica, cuando lo hice lo hice a las carreras y no consideré el caso que encontraste; el error estaría en la condición del WHILE ya que como yo sumo semanas para no recorrer cada fecha, en el caso del 14 de agosto al sumar tres semanas llegó al 4 de septiembre y por dicha condición ya no entra al ciclo.

Creo que modificando de esta forma el programa se arregla el asunto:

Cita:
...
WHILE @FechaActual <= DATEADD(Week, 1, @FechaFin)
BEGIN
SELECT @FechaLunes = DATEADD(wk, DATEDIFF(wk,0,@FechaActual), 0)
IF (@FechaLunes > @FechaIni) and (@FechaLunes <= @FechaFin )
....
Con eso leo una semana más allá de la fecha final pero solo considero el lunes que este dentro de la fecha límite.

Si encuentras otro fallo, o alguna mejora, por favor, coméntalo

Muchas gracias!
  #10 (permalink)  
Antiguo 18/08/2009, 06:07
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

ok, solo era para tener la referencia...



Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #11 (permalink)  
Antiguo 18/08/2009, 19:14
 
Fecha de Ingreso: abril-2009
Mensajes: 40
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Espero que te sirva el siguiente código, esta muy sencillo


SET DATEFIRST 1 -- SE ESTABLECE QUE EL DIA LUNES ES EL PRIMER DIA DE LA SEMANA

DECLARE @FECHA_INICIAL DATETIME, @FECHA_FINAL DATETIME, @CONTADOR INTEGER

SET @FECHA_INICIAL='01/07/2009'
SET @FECHA_FINAL='31/07/2009'
SET @CONTADOR=0

WHILE (@FECHA_INICIAL<=@FECHA_FINAL)
BEGIN
IF(DATEPART(DW,@FECHA_INICIAL)=1) -- SI EL DIA ES IGUAL AL DIA 1 DE LA SEMANA ES DECIR LUNES
SET @CONTADOR=@CONTADOR+1 -- SI ES ASI SE INCREMENTA EL CONTADOR
SET @FECHA_INICIAL=@FECHA_INICIAL+1

END


SELECT @CONTADOR AS NUMERO_DE_LUNES
  #12 (permalink)  
Antiguo 19/08/2009, 11:50
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 8 meses
Puntos: 16
Respuesta: Calcular cantidad de dias lunes de fecha uno a fecha dos

Muchas gracias a todos !!!!!!!!!

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:18.