Como extensión de la respuesta de @sabin y una pista si solo se quiere comparar la parte de la fecha (sin la hora):
Si el campo para comparar es del tipo fecha y hora y solo se especifican fechas para la comparación, entonces estas fechas se convierten internamente en valores de fecha y hora . Esto significa que la siguiente consulta
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
se convertirá a
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
internamente.
¡Esto a su vez conduce a un resultado que no incluye los objetos del 29/09/2010 con un valor de tiempo mayor que 00:00:00!
Por lo tanto, si todos los objetos con fecha 29/09/2010 también deberían incluirse, el campo para comparar debe convertirse en una fecha:
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')
min
y losmax
valores se consideran dentro del rango, para no procesar dos veces una fecha que sea el valormin
ymax
(caso límite). Por ejemplo, la fecha2010-09-29 00:00:00
será entre2010-09-28 00:00:00
y2010-09-29 00:00:00
, Y TAMBIÉN entre2010-09-29 00:00:00
y2010-09-30 00:00:00