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

Problema BETWEEN

Estas en el tema de Problema BETWEEN en el foro de Mysql en Foros del Web. hola a todos: Tengo un problema con una consulta al utilizar el BETWEEN, hago una consulta entre un rango de fechas dentro del mismo mes ...
  #1 (permalink)  
Antiguo 08/04/2011, 08:41
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 11 años, 3 meses
Puntos: 0
Problema BETWEEN

hola a todos:

Tengo un problema con una consulta al utilizar el BETWEEN, hago una consulta entre un rango de fechas dentro del mismo mes y resulta bien entregando resultados, como a continuación.

... WHERE DATE_FORMAT(fecha_hora, '%d/%m/%Y') BETWEEN '01/03/2011' AND '31/03/2011'

pero el problema se da cuando el rango de fechas pasa de un mes a otro, digamos

... WHERE DATE_FORMAT(fecha_hora, '%d/%m/%Y') BETWEEN '01/03/2011' AND '07/04/2011'

no retorna nada siendo que se encuentra en el rango de fechas de la consulta anterior y sólo se le agregan unos días más.

En la tabla, fecha_hora es de tipo datetime.

gracias por su tiempo.

saludos.
  #2 (permalink)  
Antiguo 08/04/2011, 08:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 5 meses
Puntos: 2658
Respuesta: Problema BETWEEN

Porque de esta forma:
Código MySQL:
Ver original
  1. ... WHERE DATE_FORMAT(fecha_hora, '%d/%m/%Y') BETWEEN '01/03/2011' AND '07/04/2011'
Estás haciendo una comparación de cadenas de texto, y no de fechas, ya que DATE_FORMAT lo que hace es convertir una fecha a cadena.
Prueba con
Código MySQL:
Ver original
  1. WHERE fecha_hora BETWEEN DATE_FORMAT('01/03/2011', '%d/%m/%Y')  AND DATE_FORMAT('07/04/2011', '%d/%m/%Y')
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/04/2011 a las 19:55
  #3 (permalink)  
Antiguo 10/04/2011, 19:38
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema BETWEEN

gracias, intentaré hacerlo como dices

saludos!
  #4 (permalink)  
Antiguo 11/04/2011, 11:34
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema BETWEEN

Bueno, no me ha resultado como me dices gnzsoloyo.

Aquí dejo la solución:

Código MySQL:
Ver original
  1. FROM  `tabla`
  2. WHERE fecha_hora BETWEEN STR_TO_DATE(  '01/03/2011',  '%d/%m/%Y' )
  3. AND STR_TO_DATE(  '07/04/2011',  '%d/%m/%Y' )

saludos y gracias de todas formas
  #5 (permalink)  
Antiguo 11/04/2011, 11:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 5 meses
Puntos: 2658
Respuesta: Problema BETWEEN

Perdón, sí. Me olvidé de cambiar la función DATE_FORMAT() por STR_TO_DATE().
Mea culpa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 28/04/2011, 13:28
 
Fecha de Ingreso: julio-2009
Mensajes: 29
Antigüedad: 12 años, 9 meses
Puntos: 1
Pregunta Problema BETWEEN

Yo tengo el mismo problema, y la consulta que utilizo es la siguiente:

Cita:
SELECT * FROM vistaReporte WHERE DATE_FORMAT(inicio, '%m-%Y') >= '" + fecha1 + "' AND DATE_FORMAT(inicio, '%m-%Y') <= '" + fecha2 + "' ORDER BY inicio;"
No sabia lo que mencionaste sobre la funcion DATE_FORMAT:

Cita:
DATE_FORMAT lo que hace es convertir una fecha a cadena
Pero mi pregunta es la siguiente... Como deberia hacer mi consulta, si yo necesito pasarle como parametro una fecha en formato mm-aaaa (01-2011) .

Probe con EXTRACT(YEAR_MONTH FROM inicio) y le pase el parametro 201101 (aplicandole el STR_TO_DATE)... y nada... Ayyy no se....

Es una consulta sencilla, pero no me sale..

Gracias..!!!
  #7 (permalink)  
Antiguo 28/04/2011, 16:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 5 meses
Puntos: 2658
Respuesta: Problema BETWEEN

Cita:
Pero mi pregunta es la siguiente... Como deberia hacer mi consulta, si yo necesito pasarle como parametro una fecha en formato mm-aaaa (01-2011) .
Es que ESO no es una fecha...
Además, para poder hacer consultas basadas en fechas no sirve convertir las fechas a cadenas, porque eso luego se resolverá alfabéticamente y no por sus valore sde fecha. Lo que se debe hacer es convertir las cadenas a fechas.
Si lo que quieres es manejarte con el mes y el año, la cosa se maneja de forma diferente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: fechas
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 13:21.