Se supone que la segunda referencia de fecha en la BETWEEN
sintaxis se considera mágicamente como el "final del día", pero esto no es cierto .
es decir, esto se esperaba:
SELECCIONAR * DE Casos
WHERE created_at ENTRE el comienzo de '2013-05-01' Y el final de '2013-05-01'
pero lo que realmente pasa es esto:
SELECCIONAR * DE Casos
WHERE created_at ENTRE '2013-05-01 00: 00: 00 + 00000 ' Y '2013-05-01 00: 00: 00 + 00000 '
Que se convierte en el equivalente de:
SELECCIONAR * DESDE casos DONDE created_at = '2013-05-01 00: 00: 00 + 00000 '
El problema es uno de percepciones / expectativas sobre BETWEEN
el que no incluyen tanto el valor más bajo y los valores superiores de la gama, pero no mágicamente hacer una fecha en que el "inicio de la" o "final de".
BETWEEN
debe evitarse al filtrar por rangos de fechas.
Utilice siempre el >= AND <
lugar
SELECCIONAR * DE Casos
WHERE (created_at > = '20130501' AND created_at < '20130502')
los paréntesis son opcionales aquí pero pueden ser importantes en consultas más complejas.