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

[SOLUCIONADO] Calcular días de un mes incluidos entre dos fechas

Estas en el tema de Calcular días de un mes incluidos entre dos fechas en el foro de SQL Server en Foros del Web. Maestros un saludo cordial, Tengo que calcular los días de un mes que están incluidos entre dos fechas, por ejemplo : Quiero calcular Enero de ...
  #1 (permalink)  
Antiguo 07/02/2013, 21:46
Avatar de jpogsistem  
Fecha de Ingreso: diciembre-2001
Mensajes: 2.405
Antigüedad: 22 años, 4 meses
Puntos: 4
Calcular días de un mes incluidos entre dos fechas

Maestros un saludo cordial,

Tengo que calcular los días de un mes que están incluidos entre dos fechas, por ejemplo :

Quiero calcular Enero de 2013 entre 2 fechas :

Fecha 1 : 20 de julio de 2012
Fecha 2 : 17 de Enero de 2013

El resultado de la verificación sería : 17


Otro ejemplo :

Evaluando mayo de 2012

Fecha 1 : 15 de diciembre de 2011
Fecha 2 : 30 de Agosto de 2012

El resultado de la verificación sería : 31 ya que todo el mes de mayo está incluido entre las fechas.


Gracias de antemano, todas la ideas son bienvenidas.

Saludos.
__________________
EL LIMITE ES EL UNIVERSO
  #2 (permalink)  
Antiguo 08/02/2013, 09:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Calcular días de un mes incluidos entre dos fechas

te puedes explicar con peras y manzanas que no entiendo que necesitas :S
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 08/02/2013, 11:29
Avatar de jpogsistem  
Fecha de Ingreso: diciembre-2001
Mensajes: 2.405
Antigüedad: 22 años, 4 meses
Puntos: 4
Respuesta: Calcular días de un mes incluidos entre dos fechas

Bien gracias por responder,..........me explico............tengo unos registros que guardan 1 meses y años, por ejemplo :

Enero de 2010 osea 2010-01



Y tengo otros registros que tienen rangos de fechas........por ejemplo :

Inicio : 15 de Julio de 2009 osea 2009-07-15

Fin : 20 de Octubre de 2011 osea 2011-10-20


Eso es lo que tengo.....

Necesito saber cuántos días de Enero de 2010 osea 2010-01 están contenidos entre las fechas de inicio fin ?

En este caso obicamente todo enero de 2010 (31 días) está contenido entre el 15 de julio de 2009 y 20 de octubre de 2011.


Como hago esto dinámicamente en un query ?



Gracias saludos.
__________________
EL LIMITE ES EL UNIVERSO
  #4 (permalink)  
Antiguo 08/02/2013, 11:49
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Calcular días de un mes incluidos entre dos fechas

Muy sencillo hazlo de esta forma:


select fecha = convert(datetime,'20130101') into prueba
insert into prueba (fecha) values ('20130102')
insert into prueba (fecha) values ('20130103')
insert into prueba (fecha) values ('20130104')
...
insert into prueba (fecha) values ('20130128')
insert into prueba (fecha) values ('20130129')
insert into prueba (fecha) values ('20130130')
insert into prueba (fecha) values ('20130131')
insert into prueba (fecha) values ('20130201')

declare @desde datetime
declare @hasta datetime
set @desde = '20121215'
set @hasta = '20130106'

select count(distinct fecha) cantidad from prueba where fecha >= @desde
and fecha <= @hasta and month(fecha) = '01'



con el "month(fecha) = '01'" le dices que cuente solo los dias de enero y ya, en este caso '01'
es el mes de enero, espero te sirva de algo ;)
Saludos
  #5 (permalink)  
Antiguo 08/02/2013, 13:25
Avatar de jpogsistem  
Fecha de Ingreso: diciembre-2001
Mensajes: 2.405
Antigüedad: 22 años, 4 meses
Puntos: 4
Respuesta: Calcular días de un mes incluidos entre dos fechas

Gracias leo_acn,

Me das un inicio pero debo explicar de nuevo un detalle.

Tengo un campo con los meses guardados, el que tu llamas fecha.....ahí siempre irá
el año, mes y el 01 del día...........esto es fijo, por ejemplo :

Enero 2012 : 2012-01-01
Febrero 2012 : 2012-02-01
Marzo 2012 : 2012-03-01

Esto es y siempre será así.


Ahora tengo los rangos de fechas, por ejemplo :

desde 2010-12-05 (Diciembre 5 de 2010)
hasta 2013-01-30 (Enero 30 de 2013)


Ahora quiero evaluar Enero 2012 : 2012-01-01 desde - hasta

La pregunta es : cuantos días de enero de 2012 caen en el rango de desde 2010-12-05 (Diciembre 5 de 2010) HASTA 2013-01-30 (Enero 30 de 2013) ???

SQL debe devolverme : 31


-----------------------------------------Ejemplo 2 ---------------------------

Si cambiamos el hasta y quiero evaluar el mismo mes, es decir Enero de 2012 pero :

desde 2010-12-05 (Diciembre 5 de 2010)
hasta 2012-01-15 (Enero 15 de 2012)

La pregunta es : cuantos días de enero de 2012 caen en el rango de desde 2010-12-05 (Diciembre 5 de 2010) HASTA 2012-01-15 (Enero 15 de 2012) ???

SQL debe devolverme : 15


Esto es exactamente lo que requiero.

Gracias !!!
__________________
EL LIMITE ES EL UNIVERSO
  #6 (permalink)  
Antiguo 08/02/2013, 13:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Calcular días de un mes incluidos entre dos fechas

un poco rebuscado:

Código SQL:
Ver original
  1. CREATE TABLE #temp1(
  2. dias datetime
  3. )
  4.  
  5. CREATE TABLE #temp2(
  6. dias datetime
  7. )
  8.  
  9. DECLARE @inicio VARCHAR(20)
  10. DECLARE @fin VARCHAR(20)
  11. DECLARE @fecha_inicio VARCHAR(20)
  12. DECLARE @mes_valida INT
  13. DECLARE @x INT
  14. DECLARE @mes INT
  15. DECLARE @año INT
  16.  
  17. SET @inicio='2012-01'
  18. SET @x=1
  19. SET @mes_valida=DATEPART(mm,CONVERT(datetime,@inicio + '-01'))
  20. SET @año=DATEPART(yyyy,CONVERT(datetime,@inicio + '-01'))
  21. while @x<=31
  22. BEGIN
  23. SELECT @fecha_inicio=CONVERT(datetime,(CONVERT(VARCHAR(20),@año) + '-' + CONVERT(VARCHAR(2),@x) + '-' + CONVERT(VARCHAR(20),@mes_valida))) 
  24. IF (DATEPART(mm,@fecha_inicio) = @mes_valida)
  25. BEGIN
  26.    INSERT INTO #temp1 VALUES (@fecha_inicio)  
  27. END  
  28. SET @x=@x+1
  29. END
  30.  
  31.  
  32. DECLARE @desde datetime
  33. DECLARE @hasta datetime
  34. SET @desde=CONVERT(datetime,'2010-05-12')
  35. SET @hasta=CONVERT(datetime,'2013-30-01')
  36. SET @x=0
  37.  
  38. while @x<=datediff(dd,@desde,@hasta)
  39. BEGIN
  40. INSERT INTO #temp2 VALUES (dateadd(dd,@x,@desde))
  41. SET @x=@x+1
  42. END
  43.  
  44. SELECT COUNT(*) dias FROM #temp2 WHERE dias IN (SELECT * FROM #temp1)
  45.  
  46. DELETE FROM #temp1
  47. DELETE FROM #temp2

pero regresa lo que necesitas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 08/02/2013, 22:46
Avatar de jpogsistem  
Fecha de Ingreso: diciembre-2001
Mensajes: 2.405
Antigüedad: 22 años, 4 meses
Puntos: 4
Respuesta: Calcular días de un mes incluidos entre dos fechas

Gracias por la ayuda, pero en esta línea :

Código PHP:
SELECT @fecha_inicio=CONVERT(datetime,(convert(varchar(20),@ano) + '-' CONVERT(varchar(2),@x) + '-' convert(varchar(20),@mes_valida))) 

SQL Server me devuelve el siguiente error :

Código PHP:
Msg 242Level 16State 3Line 23
The conversion of a varchar data type to a datetime data type resulted in an out
-of-range value

Alguna idea ?

Saludos y Gracias.
__________________
EL LIMITE ES EL UNIVERSO
  #8 (permalink)  
Antiguo 10/02/2013, 22:57
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Información Intenta así

Código SQL:
Ver original
  1. DECLARE @Fecha1 DateTime,
  2.         @Fecha2 DateTime,
  3.         @FechaA DateTime,
  4.         @FechaB DateTime;
  5.  
  6. SELECT  @Fecha1='20120720',
  7.         @Fecha2='20130117',
  8.         @FechaA='20130101'; --El primero de Enero 2013
  9.  
  10. SELECT  @FechaB=DateAdd(MONTH,1,@FechaA)-1; --El ultimo de Enero 2013
  11.  
  12. SELECT  DateDiff(DAY,
  13.                 CASE WHEN @Fecha1>@FechaA THEN @Fecha1 ELSE @FechaA END,
  14.                 CASE WHEN @Fecha2>@FechaB THEN @FechaB ELSE @Fecha2 END)+1;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #9 (permalink)  
Antiguo 11/02/2013, 19:10
Avatar de jpogsistem  
Fecha de Ingreso: diciembre-2001
Mensajes: 2.405
Antigüedad: 22 años, 4 meses
Puntos: 4
Respuesta: Intenta así

Cita:
Iniciado por GeriReshef Ver Mensaje
Código SQL:
Ver original
  1. DECLARE @Fecha1 DateTime,
  2.         @Fecha2 DateTime,
  3.         @FechaA DateTime,
  4.         @FechaB DateTime;
  5.  
  6. SELECT  @Fecha1='20120720',
  7.         @Fecha2='20130117',
  8.         @FechaA='20130101'; --El primero de Enero 2013
  9.  
  10. SELECT  @FechaB=DateAdd(MONTH,1,@FechaA)-1; --El ultimo de Enero 2013
  11.  
  12. SELECT  DateDiff(DAY,
  13.                 CASE WHEN @Fecha1>@FechaA THEN @Fecha1 ELSE @FechaA END,
  14.                 CASE WHEN @Fecha2>@FechaB THEN @FechaB ELSE @Fecha2 END)+1;
Espectacular.............justo lo que necesitaba.

Gracias a todos por su valiosa colaboración.
__________________
EL LIMITE ES EL UNIVERSO

Etiquetas: Ninguno
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 23:03.