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

[SOLUCIONADO] problema con funcion con rango de fechas

Estas en el tema de problema con funcion con rango de fechas en el foro de SQL Server en Foros del Web. buenas tengo un problema con esta funcion que debe de tener un rango de fechas desde y hasta cuando la consulto con 2 fechas similares ...
  #1 (permalink)  
Antiguo 14/03/2013, 13:29
Avatar de chris225  
Fecha de Ingreso: octubre-2012
Ubicación: Medellin
Mensajes: 149
Antigüedad: 11 años, 6 meses
Puntos: 2
problema con funcion con rango de fechas

buenas tengo un problema con esta funcion que debe de tener un rango de fechas desde y hasta cuando la consulto con 2 fechas similares me trae datos pero cuando lo hago con 2 fechas distintas nunca me trae nada a pesar de que las fechas estan en la base dato

aca les paso el funcion para ver si me pueden ayudar

alter function GS_FN_ConsultarComisiones
(
@pfecha date,
@pfecha1 date
)
returns Table
as
return
(
select TD.Fecha as Desde,TD.fecha1 as Hasta,VE.CODVEN,VE.INTERNO, DATEDIFF(day, TD.Fecha,TD.fecha1) as DiasFactura,
(TD.BRUTO* (RC.PorcReca/100))as ValorRecaudo,
((TD.BRUTO* (RC.PorcReca/100))*(ES.PorcReca/100)) as ComisionsinNotaCredito,

CASE WHEN VE.INTERNO = 1 THEN sum(((TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100))) ELSE (TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100) END AS COMISION
from TRADE TD
inner join MVTRADE MV on MV.NRODCTO = TD.NRODCTO AND MV.ORIGEN = TD.ORIGEN AND MV.TIPODCTO = TD.TIPODCTO
cross join GS_Recaudo RC
cross join gs_confescal ES
inner join TIPODCTO T ON T.origen=MV.origen
inner join VENDEN VE ON VE.CODVEN=TD.CODVEN
where td.FECHA=@pfecha and td.FECHA1=@pfecha1 and
(DATEDIFF(DAY, @pfecha,@pfecha1) between RC.desde and RC.hasta)group by TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
,mv.numfactnc,VE.CODVEN,VE.INTERNO
)
  #2 (permalink)  
Antiguo 14/03/2013, 13:31
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: problema con funcion con rango de fechas

Código SQL:
Ver original
  1. ALTER FUNCTION GS_FN_ConsultarComisiones
  2. (
  3. @pfecha DATE,
  4. @pfecha1 DATE
  5. )
  6. RETURNS TABLE
  7. AS
  8. RETURN
  9. (
  10. SELECT TD.Fecha AS Desde,TD.fecha1 AS Hasta,VE.CODVEN,VE.INTERNO, DATEDIFF(DAY, TD.Fecha,TD.fecha1) AS DiasFactura,
  11. (TD.BRUTO* (RC.PorcReca/100))AS ValorRecaudo,
  12. ((TD.BRUTO* (RC.PorcReca/100))*(ES.PorcReca/100)) AS ComisionsinNotaCredito,
  13.  
  14. CASE WHEN VE.INTERNO = 1 THEN SUM(((TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100))) ELSE (TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100) END AS COMISION
  15. FROM TRADE TD
  16. INNER JOIN MVTRADE MV ON MV.NRODCTO = TD.NRODCTO AND MV.ORIGEN = TD.ORIGEN AND MV.TIPODCTO = TD.TIPODCTO
  17. CROSS JOIN GS_Recaudo RC
  18. CROSS JOIN gs_confescal ES
  19. INNER JOIN TIPODCTO T ON T.origen=MV.origen
  20. INNER JOIN VENDEN VE ON VE.CODVEN=TD.CODVEN
  21. WHERE (td.FECHA=@pfecha AND td.FECHA1=@pfecha1) AND
  22. (DATEDIFF(DAY, @pfecha,@pfecha1) BETWEEN RC.desde AND RC.hasta)GROUP BY TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
  23. ,mv.numfactnc,VE.CODVEN,VE.INTERNO
  24. )

prueba con eso :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/03/2013, 13:43
Avatar de 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. ALTER FUNCTION GS_FN_ConsultarComisiones
  2. (
  3. @pfecha DATE,
  4. @pfecha1 DATE
  5. )
  6. RETURNS TABLE
  7. AS
  8. RETURN
  9. (
  10. SELECT TD.Fecha AS Desde,TD.fecha1 AS Hasta,VE.CODVEN,VE.INTERNO, DATEDIFF(DAY, TD.Fecha,TD.fecha1) AS DiasFactura,
  11. (TD.BRUTO* (RC.PorcReca/100))AS ValorRecaudo,
  12. ((TD.BRUTO* (RC.PorcReca/100))*(ES.PorcReca/100)) AS ComisionsinNotaCredito,
  13.  
  14. CASE WHEN VE.INTERNO = 1 THEN SUM(((TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100))) ELSE (TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100) END AS COMISION
  15. FROM TRADE TD
  16. INNER JOIN MVTRADE MV ON MV.NRODCTO = TD.NRODCTO AND MV.ORIGEN = TD.ORIGEN AND MV.TIPODCTO = TD.TIPODCTO
  17. CROSS JOIN GS_Recaudo RC
  18. CROSS JOIN gs_confescal ES
  19. INNER JOIN TIPODCTO T ON T.origen=MV.origen
  20. INNER JOIN VENDEN VE ON VE.CODVEN=TD.CODVEN
  21. WHERE (td.FECHA=@pfecha AND td.FECHA1=@pfecha1) AND
  22. (DATEDIFF(DAY, @pfecha,@pfecha1) BETWEEN RC.desde AND RC.hasta)GROUP BY TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
  23. ,mv.numfactnc,VE.CODVEN,VE.INTERNO
  24. )

prueba con eso :)
no funciono :(
  #4 (permalink)  
Antiguo 14/03/2013, 13:51
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: problema con funcion con rango de fechas

analisis mas a fondo....primero esto, porque pones que fecha=@fecha y fecha1=@fecha1? aqui no limitas a que solo valores iguales en las 2 fechas sean los que regrese el query? Puedes probar 2 cosas, primero nada mas corre el query con esto:

Código SQL:
Ver original
  1. WHERE (td.FECHA=@pfecha AND td.FECHA1=@pfecha1))GROUP BY TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
  2. ,mv.numfactnc,VE.CODVEN,VE.INTERNO

y ve que regresa, ahora prueba el query nada mas con esto:

Código SQL:
Ver original
  1. WHERE
  2. (DATEDIFF(DAY, @pfecha,@pfecha1) BETWEEN RC.desde AND RC.hasta)GROUP BY TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
  3. ,mv.numfactnc,VE.CODVEN,VE.INTERNO

y ve que es lo que regresa

ya que tengas eso podras saber cual condicion es la que no te esta regresando los datos como los necesitas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 14/03/2013, 14:01
Avatar de 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
analisis mas a fondo....primero esto, porque pones que fecha=@fecha y fecha1=@fecha1? aqui no limitas a que solo valores iguales en las 2 fechas sean los que regrese el query? Puedes probar 2 cosas, primero nada mas corre el query con esto:

Código SQL:
Ver original
  1. WHERE (td.FECHA=@pfecha AND td.FECHA1=@pfecha1))GROUP BY TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
  2. ,mv.numfactnc,VE.CODVEN,VE.INTERNO

y ve que regresa, ahora prueba el query nada mas con esto:

Código SQL:
Ver original
  1. WHERE
  2. (DATEDIFF(DAY, @pfecha,@pfecha1) BETWEEN RC.desde AND RC.hasta)GROUP BY TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
  3. ,mv.numfactnc,VE.CODVEN,VE.INTERNO

y ve que es lo que regresa

ya que tengas eso podras saber cual condicion es la que no te esta regresando los datos como los necesitas :)
gracias por la ayuda te explico

lo que pasa es que tengo un rango de fechas que se debe consultar fecha desde y fecha hasta, entonces devuelve un numero entero osea cuenta los dias que estan entre la fecha inicio y final y da el total de dias, y luego hay que compararlo con un rango de numeros de desde hasta, ese numero de dias debe de estar entre desde y hasta de la tabla gs_recaudos
  #6 (permalink)  
Antiguo 14/03/2013, 14:03
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: problema con funcion con rango de fechas

ok, entonces cual de los querys que te sugeri regresa el resultado esperado?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 14/03/2013, 14:06
Avatar de 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
ok, entonces cual de los querys que te sugeri regresa el resultado esperado?
gracias por la ayuda te explico

lo que pasa es que tengo un rango de fechas que se debe consultar fecha desde y fecha hasta, entonces devuelve un numero entero osea cuenta los dias que estan entre la fecha inicio y final y da el total de dias, y luego hay que compararlo con un rango de numeros de desde hasta, ese numero de dias debe de estar entre desde y hasta de la tabla gs_recaudos

un ejemplo

fecha fecha1 total dias
2012/02/01 2012/02/02 1

desde hasta
1 5

y luego compara el total de dias con ese desde y hasta y hay traer el resultado
  #8 (permalink)  
Antiguo 14/03/2013, 14:13
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: problema con funcion con rango de fechas

ya probaste usando nada mas una fecha algo como esto?

Código SQL:
Ver original
  1. ALTER FUNCTION GS_FN_ConsultarComisiones
  2. (
  3. @pfecha DATE,
  4. @pfecha1 DATE
  5. )
  6. RETURNS TABLE
  7. AS
  8. RETURN
  9. (
  10. SELECT TD.Fecha AS Desde,TD.fecha1 AS Hasta,VE.CODVEN,VE.INTERNO, DATEDIFF(DAY, TD.Fecha,TD.fecha1) AS DiasFactura,
  11. (TD.BRUTO* (RC.PorcReca/100))AS ValorRecaudo,
  12. ((TD.BRUTO* (RC.PorcReca/100))*(ES.PorcReca/100)) AS ComisionsinNotaCredito,
  13.  
  14. CASE WHEN VE.INTERNO = 1 THEN SUM(((TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100))) ELSE (TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100) END AS COMISION
  15. FROM TRADE TD
  16. INNER JOIN MVTRADE MV ON MV.NRODCTO = TD.NRODCTO AND MV.ORIGEN = TD.ORIGEN AND MV.TIPODCTO = TD.TIPODCTO
  17. CROSS JOIN GS_Recaudo RC
  18. CROSS JOIN gs_confescal ES
  19. INNER JOIN TIPODCTO T ON T.origen=MV.origen
  20. INNER JOIN VENDEN VE ON VE.CODVEN=TD.CODVEN
  21. WHERE (td.FECHA=@pfecha) AND
  22. (DATEDIFF(DAY, @pfecha,@pfecha1) BETWEEN RC.desde AND RC.hasta)GROUP BY TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
  23. ,mv.numfactnc,VE.CODVEN,VE.INTERNO
  24. )

ahora si eso no resulta, puedes poner un pequeño ejemplo de tus datos?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 14/03/2013, 14:17
Avatar de 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
ya probaste usando nada mas una fecha algo como esto?

Código SQL:
Ver original
  1. ALTER FUNCTION GS_FN_ConsultarComisiones
  2. (
  3. @pfecha DATE,
  4. @pfecha1 DATE
  5. )
  6. RETURNS TABLE
  7. AS
  8. RETURN
  9. (
  10. SELECT TD.Fecha AS Desde,TD.fecha1 AS Hasta,VE.CODVEN,VE.INTERNO, DATEDIFF(DAY, TD.Fecha,TD.fecha1) AS DiasFactura,
  11. (TD.BRUTO* (RC.PorcReca/100))AS ValorRecaudo,
  12. ((TD.BRUTO* (RC.PorcReca/100))*(ES.PorcReca/100)) AS ComisionsinNotaCredito,
  13.  
  14. CASE WHEN VE.INTERNO = 1 THEN SUM(((TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100))) ELSE (TD.BRUTO*(RC.PorcReca/100))-((MV.cantidad * MV.valorunit)) * (ES.PorcReca/100) END AS COMISION
  15. FROM TRADE TD
  16. INNER JOIN MVTRADE MV ON MV.NRODCTO = TD.NRODCTO AND MV.ORIGEN = TD.ORIGEN AND MV.TIPODCTO = TD.TIPODCTO
  17. CROSS JOIN GS_Recaudo RC
  18. CROSS JOIN gs_confescal ES
  19. INNER JOIN TIPODCTO T ON T.origen=MV.origen
  20. INNER JOIN VENDEN VE ON VE.CODVEN=TD.CODVEN
  21. WHERE (td.FECHA=@pfecha) AND
  22. (DATEDIFF(DAY, @pfecha,@pfecha1) BETWEEN RC.desde AND RC.hasta)GROUP BY TD.BRUTO,RC.PorcReca,MV.tipodcto,MV.NRODCTO,MV.tip odctonc,ES.PorcReca,MV.cantidad,MV.valorunit,TD.Fe cha,TD.Fecha1
  23. ,mv.numfactnc,VE.CODVEN,VE.INTERNO
  24. )

ahora si eso no resulta, puedes poner un pequeño ejemplo de tus datos?
tiene que ser 2 fechas y tira un monton de datos porque solamente usa la fecha inicial y necesita la final

el resultado trae todas las fechas despues de la primera
  #10 (permalink)  
Antiguo 14/03/2013, 14:21
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: problema con funcion con rango de fechas

acaso probaste el query? si tienes una condicion and con un between solo te regresara los datos que empiecen con la fecha y tengan los dias que hay de diferencia entre fecha y fecha1 que esten en el rango de los dias que manejas.....puedes poner un pequeño ejemplo de tus datos....ayudame a ayudarte :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 14/03/2013, 14:32
Avatar de 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
acaso probaste el query? si tienes una condicion and con un between solo te regresara los datos que empiecen con la fecha y tengan los dias que hay de diferencia entre fecha y fecha1 que esten en el rango de los dias que manejas.....puedes poner un pequeño ejemplo de tus datos....ayudame a ayudarte :)
si claro este es lo que retorno pero una sugerencia, puedo crear una variable y el valor de esa variable sea de dateiff y luego en vez de between sea desde>parametro and hasta<parametro parametro=(DATEDIFF(DAY, @pfecha,@pfecha1)
  #12 (permalink)  
Antiguo 14/03/2013, 14:57
Avatar de 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

con los 2 rangos de fechas iguales el 1 despues de null es el numero de dias

2010-01-06 00:00:00.000 2010-01-06 00:00:00.000 43605358 NULL 1 0.00000000 0.00000000000000 0.00000000
2010-01-06 00:00:00.000 2010-01-06 00:00:00.000 43605358 NULL 1 0.00000000 0.00000000000000 0.00000000
2010-01-06 00:00:00.000 2010-01-06 00:00:00.000 43605358 NULL 1 0.00000000 0.00000000000000 -9200.00000000
2010-01-06 00:00:00.000 2010-01-06 00:00:00.000 43605358 NULL 1 0.00000000 0.00000000000000 -9400.00000000

con solo el rango de fechas inicial

2010-01-06 00:00:00.000 2010-01-06 00:00:00.000 43605358 NULL 150 0.00000000 0.00000000000000 0.00000000
2010-01-06 00:00:00.000 2010-01-06 00:00:00.000 43605358 NULL 20 0.00000000 0.00000000000000 0.00000000
2010-01-06 00:00:00.000 2010-01-06 00:00:00.000 43605358 NULL 25 0.00000000 0.00000000000000 -9200.00000000
2010-01-06 00:00:00.000 2010-01-06 00:00:00.000 43605358 NULL 257 0.00000000 0.00000000000000 -9400.00000000
  #13 (permalink)  
Antiguo 14/03/2013, 16:03
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: problema con funcion con rango de fechas

creo que deberias de definir tu rango en el between en lugar de usar los valores de cada desde y hasta que tiene tu tabla.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 14/03/2013, 16:47
Avatar de 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
creo que deberias de definir tu rango en el between en lugar de usar los valores de cada desde y hasta que tiene tu tabla.....
no te entendi claramente pero los rangos estan bien estan desde 0 hasta 5 y otro de 1 hasta 10
  #15 (permalink)  
Antiguo 14/03/2013, 17:03
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: 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
  #16 (permalink)  
Antiguo 15/03/2013, 07:05
Avatar de 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)
  #17 (permalink)  
Antiguo 15/03/2013, 09:39
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: problema con funcion con rango de fechas

despues de la mega explicacion que me avente, resulto que tenia razon jejejeje el problema es el hasta y el desde :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #18 (permalink)  
Antiguo 15/03/2013, 09:47
Avatar de 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
despues de la mega explicacion que me avente, resulto que tenia razon jejejeje el problema es el hasta y el desde :P
lo que pasa es que esos datos de la tabla son datos que el usuario ya ha registrado son de configuracion son como unos rango de dias de 1 a 5 dias y etc

entonces se deben sacar los registros de solamente la fechas que entren dentro de ese rango
  #19 (permalink)  
Antiguo 15/03/2013, 09:52
Avatar de 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

mira cree una una subconsulta

where (TD.FECHA=@pfecha and TD.FECHA1=@pfecha1) and
(DATEDIFF(DAY, @pfecha,@pfecha1)) > all (select rc.Desde from GS_Recaudo where (DATEDIFF(DAY, @pfecha,@pfecha1) >= rc.desde)) and
(DATEDIFF(DAY, @pfecha,@pfecha1)) < all (select rc.Hasta from GS_Recaudo where (DATEDIFF(DAY, @pfecha,@pfecha1) >= rc.Hasta))
  #20 (permalink)  
Antiguo 18/03/2013, 11:29
Avatar de 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

gracias por la ayuda tuve que arreglar la funcion me faltaba la relacion de las tablas cree campos nuevos que las relacione muchas gracias por la ayuda saludos :)

Etiquetas: funcion, rango, select
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 19:40.