Solución:
Puedes usar el DATE()
función para extraer la parte de la fecha de la marca de tiempo:
SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-25'
Sin embargo, si tiene un índice en la columna de marca de tiempo, esto sería más rápido porque podría utilizar un índice en la columna de marca de tiempo si tiene uno:
SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-25 00:00:00' AND '2012-05-25 23:59:59'
WHERE cast(timestamp as date) = '2012-05-05'
Como sugirieron algunos, usando DATE(timestamp)
está aplicando manipulación a la columna y, por lo tanto, no puede confiar en el orden del índice.
Sin embargo, usando BETWEEN
solo sería confiable si incluye los milisegundos. En la marca de tiempo del ejemplo BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
excluye registros con una marca de tiempo entre 2012-05-05 23:59:59.001
y 2012-05-05 23:59:59.999
. Sin embargo, incluso este método tiene algunos problemas debido a la precisión de los tipos de datos. Ocasionalmente, se redondean 999 milisegundos.
Lo mejor que puedes hacer es:
SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'