Ver Mensaje Individual
  #15 (permalink)  
Antiguo 14/03/2013, 17:03
Avatar de Libras
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: problema con funcion con rango de fechas

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 :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me