Comme extension à la réponse de @sabin et comme indication si l'on veut comparer les date partie seulement (sans l'heure) :
Si le champ à comparer est de type datetime et seulement dates sont spécifiés à des fins de comparaison, alors ces dates sont convertis en interne en datetime valeurs. Cela signifie que la requête suivante
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
sera converti en
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
en interne.
Cela conduit à un résultat qui n'inclut pas les objets du 2010-09-29 dont la valeur temporelle est supérieure à 00:00:00 !
Ainsi, si tous les objets portant la date 2010-09-29 doivent également être inclus, le champ à comparer doit être converti en date :
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')