Código SQL:
Ver originalCREATE TABLE #temp
(
fecha datetime,
fecha1 datetime,
desde INT,
hasta INT
)
INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,1,getdate()),1,5)
INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,2,getdate()),1,3)
INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,3,getdate()),1,4)
INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,4,getdate()),1,2)
INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,5,getdate()),1,6)
INSERT INTO #temp VALUES (GETDATE(),DATEADD(dd,16,getdate()),1,7)
---estos son los datos-----------
2013-03-14 16:47:40.657 2013-03-15 16:47:40.657 1 5
2013-03-14 16:47:40.657 2013-03-16 16:47:40.657 1 3
2013-03-14 16:47:40.657 2013-03-17 16:47:40.657 1 4
2013-03-14 16:47:40.657 2013-03-18 16:47:40.657 1 2
2013-03-14 16:47:40.660 2013-03-19 16:47:40.660 1 6
2013-03-14 16:47:40.660 2013-03-30 16:47:40.660 1 7
DECLARE @inicio datetime
DECLARE @fin datetime
SET @inicio=GETDATE()
SET @fin=dateadd(dd,1,GETDATE())
--si hacemos este query nos regresa
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))
AND (DATEDIFF(dd,@inicio,@fin) BETWEEN desde AND hasta)
2013-03-14 16:47:40.657 2013-03-16 16:47:40.657 1 3
--Que esta bien ahora si por ejemplo hacemos esto:
DECLARE @inicio datetime
DECLARE @fin datetime
SET @inicio=GETDATE()
SET @fin=dateadd(dd,4,GETDATE())
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))
AND (DATEDIFF(dd,@inicio,@fin) BETWEEN desde AND hasta)
deberia de regresar
2013-03-14 16:47:40.657 2013-03-18 16:47:40.657 1 2
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)
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 :)