Solución:
Como solo está buscando la parte de la fecha, puede compararlas fácilmente usando MySQL DATE()
función.
SELECT * FROM table WHERE DATE(created_at) = DATE(NOW() - INTERVAL 1 DAY);
Tenga en cuenta que si tiene una gran cantidad de registros, esto puede resultar ineficaz; Las ventajas de indexación se pierden con el valor derivado de DATE()
. En ese caso, puede utilizar esta consulta:
SELECT * FROM table
WHERE created_at BETWEEN CURDATE() - INTERVAL 1 DAY
AND CURDATE() - INTERVAL 1 SECOND;
Esto funciona porque los valores de fecha como el devuelto por CURDATE()
se supone que tienen una marca de tiempo de 00:00:00. El índice aún se puede usar porque el valor de la columna de fecha no se está transformando en absoluto.
Aún puedes usar el índice si dices
SELECT * FROM TABLE
WHERE CREATED_AT >= CURDATE() - INTERVAL 1 DAY
AND CREATED_AT < CURDATE();
Puedes usar subdate
para indicar “ayer” y usar date()
para indicar que desea registros en los que coincida solo la parte de la fecha de la columna. Entonces:
SELECT *
FROM tablename
WHERE DATE(created_at) = SUBDATE(CURRENT_DATE(), INTERVAL 1 DAY)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)