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

Problemas con sentencia WHERE de datetime y Between

Estas en el tema de Problemas con sentencia WHERE de datetime y Between en el foro de Mysql en Foros del Web. Hola, tengo problemas con respecto a cuando hago sentencias entre dos fechas con la palabra between Tengo mysql 5.1 por ejemplo tengo la siguiente query ...
  #1 (permalink)  
Antiguo 05/09/2011, 12:04
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años
Puntos: 0
Problemas con sentencia WHERE de datetime y Between

Hola,

tengo problemas con respecto a cuando hago sentencias entre dos fechas con la palabra between

Tengo mysql 5.1

por ejemplo tengo la siguiente query

tabla personas

campo persona: varchar
campo fecha: datetime con horas, minutos y segundos incluidos.

ejemplo

persona/fecha
Diego/2011-08-02 17:55:59


Código:
select persona, fecha
from personas
where
fecha between '2011-07-29' and '2011-08-31'
y me retorna solamente entre 2011-07-29 hasta el 2011-08-30 (no me toma la fecha 2011-08-31)

despues intente con esto

Código:
select persona, fecha
from personas
where
fecha between CONCAT(DATE('2011-07-29'),'%') and CONCAT(DATE('2011-08-31'),'%')
y volvio a pasar lo mismo y por ultimo intente con esto.

Código:
select persona, fecha
from personas
where
fecha >= '2011-07-29') and fecha <='2011-08-31'

¿Que puedo hacer para que me tome todo el intervalo completo, ¿Porque ocurre esto? ¿Es un bug? ¿Como lo puedo hacer?

Saludos.
  #2 (permalink)  
Antiguo 05/09/2011, 12:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problemas con sentencia WHERE de datetime y Between

Si estás buscando un intervalo de fechas, pero usas DATETIMES en la tabla, lo que debes hacer es "cortar" la fecha del campo de modo que no tome las horas, porque cuando operas con DATE y DATETIME mezclados en la consulta, MySQL convierte a DATETIME (mayor rango) todo, y cuando no tiene horas, le pone la hora "00:00:00".
Por eso no te devuelve la fecha que pides.
La cosa en realidad es simple:
Código MySQL:
Ver original
  1. SELECT persona, fecha
  2. FROM personas
  3. WHERE DATE(fecha) BETWEEN '2011-07-29' AND '2011-08-31';
__________________
¿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; 08/09/2011 a las 16:10
  #3 (permalink)  
Antiguo 08/09/2011, 15:48
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con sentencia WHERE de datetime y Between

Gracias,

me funciono perfecto
  #4 (permalink)  
Antiguo 08/09/2011, 16:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problemas con sentencia WHERE de datetime y Between

__________________
¿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: datetime, query, select, sentencia, sql, tabla
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 11:50.