15/03/2013, 07:05
|
| | | Fecha de Ingreso: octubre-2012 Ubicación: Medellin
Mensajes: 149
Antigüedad: 12 años, 2 meses Puntos: 2 | |
Respuesta: problema con funcion con rango de fechas Cita:
Iniciado por Libras
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 :) 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) |