Como extensão à resposta de @sabin e uma dica se alguém quiser comparar apenas a parte da data (sem a hora):
Se o campo a comparar for do tipo datetime e somente as datas forem especificadas para comparação, essas datas serão convertidas internamente em valores de datetime . Isso significa que a seguinte consulta
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
será convertido para
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
internamente.
Por sua vez, isso resulta em um resultado que não inclui os objetos de 29/09/2010 com um valor de tempo maior que 00:00:00!
Portanto, se todos os objetos com data 29/09/2010 também devem ser incluídos, o campo para comparar deve ser convertido em uma data:
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')
min
emax
são considerados dentro do intervalo, para não processar duas vezes por data que seja o valormin
emax
(caso de aresta). Por exemplo, a data2010-09-29 00:00:00
será entre2010-09-28 00:00:00
e2010-09-29 00:00:00
, E TAMBÉM entre2010-09-29 00:00:00
e2010-09-30 00:00:00