Supõe-se que a segunda referência de data na BETWEEN
sintaxe é magicamente considerada o "fim do dia", mas isso não é verdade .
isto é esperado:
SELECT * FROM Casos
WHERE created_at ENTRE o início de '2013-05-01' E o final de '2013-05-01'
mas o que realmente acontece é isso:
SELECT * FROM Casos
WHERE created_at ENTRE '2013-05-01 00: 00: 00 + 00000 ' AND '2013-05-01 00: 00: 00 + 00000 '
Que se torna o equivalente a:
SELECT * FROM Casos WHERE created_at = '2013-05-01 00: 00: 00 + 00000 '
O problema é uma das percepções / expectativas sobre BETWEEN
o que não incluir tanto o valor mais baixo e os valores superiores da gama, mas não magicamente fazer uma data de "início de" ou "o fim da".
BETWEEN
deve ser evitado ao filtrar por períodos.
Sempre usar a >= AND <
vez
SELECT * FROM Casos
WHERE (created_at > = '20130501' AND created_at < '20130502')
os parênteses são opcionais aqui, mas podem ser importantes em consultas mais complexas.