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

Between entre 2 fechas

Estas en el tema de Between entre 2 fechas en el foro de SQL Server en Foros del Web. Hola compañeros, buen día!! Les comento mi situación. Tengo un procedimiento almacenado que me trae un listado por medio de filtros, unos de ellos son ...
  #1 (permalink)  
Antiguo 15/10/2013, 11:53
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Between entre 2 fechas

Hola compañeros, buen día!!

Les comento mi situación. Tengo un procedimiento almacenado que me trae un listado por medio de filtros, unos de ellos son una fecha inicio y una fecha fin; en el listado tengo una fecha solicitud que quiero mostrar cuando este entre las dos fechas filtro o bien cuando no se filtre por fechas. Esto es lo que tengo pero no me trae ningún registro cuando si hay:
Código SQL:
Ver original
  1. WHERE ot.id_Estatus=306
  2.          AND CASE WHEN ot.fh_Reenvio IS NOT NULL THEN ot.fh_Reenvio ELSE ot.fh_envio END
  3.             BETWEEN ISNULL(@fh_Inicio, CASE WHEN ot.fh_Reenvio IS NOT NULL THEN ot.fh_Reenvio ELSE ot.fh_envio END) AND
  4.         ISNULL(@fh_Fin, CASE WHEN ot.fh_Reenvio IS NOT NULL THEN ot.fh_Reenvio ELSE ot.fh_envio END)
Espero me puedan ayudar. Saludos y gracias

Última edición por gnzsoloyo; 15/10/2013 a las 17:58
  #2 (permalink)  
Antiguo 15/10/2013, 11:54
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: Between entre 2 fechas

cual es tu formato de fecha? como estas consultado las fechas??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 15/10/2013, 12:28
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

fh_reenvio y fh_envio son tipo datetime, los filtros fh_inicio y fh_fin les doy este formato antes de enviarlos: #DateFormat(Filtro_fh_Inicio, 'yyyy-mm-dd')#
  #4 (permalink)  
Antiguo 15/10/2013, 12:33
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: Between entre 2 fechas

hazles un convert a tus fechas del siguiente modo

convert(varchar(20),getdate(),101)

para que agarre los rangos de fechas que buscas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 15/10/2013, 12:45
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

Gracias por tu respuesta, ya lo hice y aún así no me trae nada :(
  #6 (permalink)  
Antiguo 15/10/2013, 12:49
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: Between entre 2 fechas

puedes poner un 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
  #7 (permalink)  
Antiguo 15/10/2013, 13:03
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

La fecha que viene de mi formulario: 2013-01-10
La fecha de la BD: 2013-09-11 09:22:11.967
  #8 (permalink)  
Antiguo 15/10/2013, 13:49
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: Between entre 2 fechas

dices que si hay valores pero ya revisaste que tu sentencia es que, si es null el valor de fecha de reenvio entonces que tome la fecha de envio para el between, eso esta bien???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 15/10/2013, 14:09
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

Así es, si se reenvía es la fecha que vale, si no pues se queda la fecha de envio
  #10 (permalink)  
Antiguo 15/10/2013, 14:12
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: Between entre 2 fechas

y con esas combinaciones obtienes resultados?? porque puede ser que la fecha de envio sea nula y es la que esta en el rango del between entonces tomaria la de entrega que esta fuera, por lo que quedaria fuera de tu condicion....si me explico??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 15/10/2013, 14:30
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

si, si debe traer resultados, la que se toma en cuenta primero es la fecha de reenvio, en caso de que sea nula es cuando se va por la fecha de envio
  #12 (permalink)  
Antiguo 15/10/2013, 14:37
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: Between entre 2 fechas

puedes poner un ejemplo de los datos completos? unos 10 registros serian suficientes :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 15/10/2013, 14:55
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

2013-08-30 00:00:00.000 NULL
2013-08-30 00:00:00.000 2013-09-11 09:22:11.967
2013-08-30 00:00:00.000 NULL
2013-08-30 00:00:00.000 NULL
2013-08-30 00:00:00.000 NULL
2013-09-03 12:08:27.003 2013-09-03 12:13:58.537
NULL NULL
2013-09-03 12:08:27.003 NULL
2013-09-03 12:08:27.003 NULL
2013-09-03 12:08:27.003 NULL
2013-09-22 16:54:00.320 NULL
2013-10-14 16:20:21.823 NULL

la primera columna es la fecha de envio
  #14 (permalink)  
Antiguo 15/10/2013, 15:05
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: Between entre 2 fechas

i got it......

Código SQL:
Ver original
  1. WHERE ot.id_Estatus=306
  2. AND CASE WHEN ot.fh_Reenvio IS NOT NULL THEN ot.fh_Reenvio ELSE ot.fh_envio END
  3. BETWEEN ISNULL(@fh_Inicio, CASE WHEN ot.fh_Reenvio IS NOT NULL THEN ot.fh_Reenvio ELSE ot.fh_envio END) AND
  4. ISNULL(@fh_Fin, CASE WHEN ot.fh_Reenvio IS NOT NULL THEN ot.fh_Reenvio ELSE ot.fh_envio END)

porque tienes en los 2 cases las mismas condiciones??? ya te fijaste? no deberia de ser

Código SQL:
Ver original
  1. WHERE ot.id_Estatus=306
  2. AND CASE WHEN ot.fh_Reenvio IS NOT NULL THEN ot.fh_Reenvio ELSE ot.fh_envio END
  3. BETWEEN ISNULL(@fh_Inicio, CASE WHEN ot.fh_Reenvio IS NOT NULL THEN ot.fh_Reenvio ELSE ot.fh_envio END) AND
  4. ISNULL(@fh_Fin, CASE WHEN ot.fh_envio IS NOT NULL THEN ot.fh_envio ELSE ot.fh_Reenvio  END)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 15/10/2013, 15:23
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

Porque se está comparando con el mismo dato, si mi fecha de reenvio es valida con esa voy a comparar mi fecha inicio y mi fecha fin, o estoy mal?
  #16 (permalink)  
Antiguo 15/10/2013, 15:44
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

Tengo esto en otro ejemplo:

Código SQL:
Ver original
  1. AND CR.fh_Recepcion BETWEEN ISNULL(@fh_Inicio, CR.fh_Recepcion) AND ISNULL(@fh_Fin, CR.fh_Recepcion)
es lo mismo sólo que aquí no tengo que elegir el campo con el que se van a comparar los filtros, es fh_recepcion

Última edición por gnzsoloyo; 15/10/2013 a las 17:58
  #17 (permalink)  
Antiguo 15/10/2013, 15:52
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: Between entre 2 fechas

probe con esto y funciona:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. fecha1 datetime,
  4. fecha2 datetime
  5. )
  6.  
  7. INSERT INTO #temp VALUES ('2013-08-30 00:00:00.000', NULL)
  8. INSERT INTO #temp VALUES ('2013-08-30 00:00:00.000', '2013-09-11 09:22:11.967')
  9. INSERT INTO #temp VALUES ('2013-08-30 00:00:00.000', NULL)
  10. INSERT INTO #temp VALUES ('2013-08-30 00:00:00.000', NULL)
  11. INSERT INTO #temp VALUES ('2013-08-30 00:00:00.000', NULL)
  12. INSERT INTO #temp VALUES ('2013-09-03 12:08:27.003', '2013-09-03 12:13:58.537')
  13. INSERT INTO #temp VALUES (NULL,NULL)
  14. INSERT INTO #temp VALUES ('2013-09-03 12:08:27.003', NULL)
  15. INSERT INTO #temp VALUES ('2013-09-03 12:08:27.003', NULL)
  16. INSERT INTO #temp VALUES ('2013-09-03 12:08:27.003', NULL)
  17. INSERT INTO #temp VALUES ('2013-09-22 16:54:00.320', NULL)
  18. INSERT INTO #temp VALUES ('2013-10-14 16:20:21.823', NULL)
  19.  
  20. DECLARE @fh_inicio datetime
  21. DECLARE @fh_fin datetime
  22. SET @fh_inicio='2013-01-01'
  23. SET @fh_fin='2013-09-12'
  24. SELECT * FROM #temp WHERE
  25. CASE WHEN fecha2 IS NOT NULL THEN fecha2 ELSE fecha1 END
  26. BETWEEN ISNULL(@fh_Inicio, CASE WHEN fecha2 IS NOT NULL THEN fecha2 ELSE fecha1 END) AND
  27. ISNULL(@fh_Fin, CASE WHEN fecha2 IS NOT NULL THEN fecha2 ELSE fecha1 END)

saludos!
__________________
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/10/2013, 16:03
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

Si te regresó resultados? Son los mismos registros que te pasé?
  #19 (permalink)  
Antiguo 15/10/2013, 16:04
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: Between entre 2 fechas

si regresa resultados, probe cambiando las fechas por nulos y regresa datos, prueba con el ejemplo que te estoy poniendo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #20 (permalink)  
Antiguo 15/10/2013, 16:09
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

Pero es el mismo código no?
  #21 (permalink)  
Antiguo 15/10/2013, 16: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: Between entre 2 fechas

si, es el mismo codigo tal cual lo estas presentando, y me regresa resultados, revisa bien tus datos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #22 (permalink)  
Antiguo 15/10/2013, 16:20
 
Fecha de Ingreso: julio-2013
Mensajes: 57
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Between entre 2 fechas

ok, gracias por la ayuda!!

Etiquetas: fecha, registro
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 04:05.