Quel est le moyen le plus efficace d’obtenir tous les enregistrements dont le champ date/heure se situe quelque part entre hier à 00:00:00
et hier à 23:59:59
?
Table:
id created_at
1 2016-01-19 20:03:00
2 2016-01-19 11:12:05
3 2016-01-20 03:04:01
Supposons qu'hier, c'était le 19/01/2016, dans ce cas, tout ce que je voudrais retourner, ce sont les lignes 1 et 2.
Puisque vous ne recherchez que la partie date, vous pouvez comparer facilement celle-ci en utilisant la fonction DATE()
de MySQL . Notez que si vous avez un très grand nombre d'enregistrements, cela peut être inefficace; Les avantages d'indexation sont perdus avec la valeur dérivée de DATE()
.
SELECT * FROM table WHERE DATE(created_at) = DATE(NOW() - INTERVAL 1 DAY);
Vous pouvez toujours utiliser l'index si vous dites
SELECT * FROM TABLE
WHERE CREATED_AT >= CURDATE() - INTERVAL 1 DAY
AND CREATED_AT < CURDATE();
Vous pouvez utiliser subdate
pour indiquer «hier» et date()
pour indiquer que vous souhaitez des enregistrements contenant uniquement la partie date de la colonne. Alors:
SELECT *
FROM tablename
WHERE DATE(created_at) = SUBDATE(CURRENT_DATE(), INTERVAL 1 DAY)
Ici est la même question avec une réponse. Pour résumer la réponse pour vous, utilisez subdate () comme suggéré par Sajmon.
subdate(currentDate, 1)
en utilisant votre table, il devrait être.
select *
from tablename
where created_at between subdate(CURDATE(), 1)
and date (now() )