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')
miny losmaxvalores se consideran dentro del rango, para no procesar dos veces una fecha que sea el valorminymax(caso límite). Por ejemplo, la fecha2010-09-29 00:00:00será entre2010-09-28 00:00:00y2010-09-29 00:00:00, Y TAMBIÉN entre2010-09-29 00:00:00y2010-09-30 00:00:00