Ver Mensaje Individual
  #16 (permalink)  
Antiguo 15/03/2013, 07:05
Avatar de chris225
chris225
 
Fecha de Ingreso: octubre-2012
Ubicación: Medellin
Mensajes: 149
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: problema con funcion con rango de fechas

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. fecha datetime,
  4. fecha1 datetime,
  5. desde INT,
  6. hasta INT
  7. )
  8.  
  9. INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,1,getdate()),1,5)
  10. INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,2,getdate()),1,3)
  11. INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,3,getdate()),1,4)
  12. INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,4,getdate()),1,2)
  13. INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,5,getdate()),1,6)
  14. INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,16,getdate()),1,7)
  15.  
  16. ---estos son los datos-----------
  17. 2013-03-14 16:47:40.657 2013-03-15 16:47:40.657 1   5
  18. 2013-03-14 16:47:40.657 2013-03-16 16:47:40.657 1   3
  19. 2013-03-14 16:47:40.657 2013-03-17 16:47:40.657 1   4
  20. 2013-03-14 16:47:40.657 2013-03-18 16:47:40.657 1   2
  21. 2013-03-14 16:47:40.660 2013-03-19 16:47:40.660 1   6
  22. 2013-03-14 16:47:40.660 2013-03-30 16:47:40.660 1   7
  23.  
  24. DECLARE @inicio datetime
  25. DECLARE @fin datetime
  26.  
  27. SET @inicio=GETDATE()
  28. SET @fin=dateadd(dd,1,GETDATE())
  29.  
  30. --si hacemos este query nos regresa
  31. SELECT * FROM #temp WHERE (CONVERT(VARCHAR(20),fecha,101)=CONVERT(VARCHAR(20),@inicio,101) AND CONVERT(VARCHAR(20),fecha1,101)=CONVERT(VARCHAR(20),@fin,101))
  32. AND (DATEDIFF(dd,@inicio,@fin) BETWEEN desde AND hasta)
  33.  
  34. 2013-03-14 16:47:40.657 2013-03-16 16:47:40.657 1   3
  35.  
  36. --Que esta bien ahora si por ejemplo hacemos esto:
  37.  
  38. DECLARE @inicio datetime
  39. DECLARE @fin datetime
  40.  
  41. SET @inicio=GETDATE()
  42. SET @fin=dateadd(dd,4,GETDATE())
  43.  
  44. SELECT * FROM #temp WHERE (CONVERT(VARCHAR(20),fecha,101)=CONVERT(VARCHAR(20),@inicio,101) AND CONVERT(VARCHAR(20),fecha1,101)=CONVERT(VARCHAR(20),@fin,101))
  45. AND (DATEDIFF(dd,@inicio,@fin) BETWEEN desde AND hasta)
  46.  
  47. deberia de regresar
  48. 2013-03-14 16:47:40.657 2013-03-18 16:47:40.657 1   2
  49.  
  50. pero regresa NULL, porque pues porque la diferencia de dias no hace MATCH con los valores desde y hasta(datediff=5 desde=1 hasta=2)
  51.  
  52. lo que te sugiero es que el desde y el hasta sean valores definidos no valores que vienen en la tabla(a menos que en la tabla siempre, siempre, sean valores ya definidos)

espero se entienda :)
gracias encontre ya el problema

lo que pasa es que en el registro de donde estan los desde y hasta el primero es desde 0 y hasta 0 son ceros y consulta a ese solo registro porque cuando las fechas son iguales son 0 y trae datos pero cuando las fechas son distintas son mayores de 0 y por eso no trae datos

entonces mi idea seria realizar una subconsulta o cursor que me recorra los datos y me pregunte por los parametros de busqueda datos que se acomoden este seria como una prueba que me puede servir

select Codigo,* from GS_Recaudo where (DATEDIFF(DAY, '2012/07/26','2012/07/28') between desde and hasta)