Comment sélectionner des lignes avec l'horodatage du jour en cours
Dans les systèmes de gestion de bases de données, il est courant de stocker des horodatages pour les enregistrements de données afin de suivre quand ils ont été créé ou modifié. Cependant, lorsque vous devez récupérer des données d'une table avec des horodatages, vous pourriez rencontrer des difficultés lors de la sélection d'enregistrements en fonction de dates spécifiques.
Énoncé du problème
Vous disposez d'une base de données table avec une colonne d'horodatage et vous souhaitez récupérer uniquement les enregistrements créés le jour en cours. Vous avez initialement utilisé la requête ci-dessous, mais vous avez remarqué qu'elle renvoie les enregistrements des dernières 24 heures, pas seulement la date du jour :
SELECT * FROM `table` WHERE (`timestamp` > DATE_SUB(now(), INTERVAL 1 DAY));
Solution
Pour sélectionner les lignes qui ont l'horodatage du jour en cours tout en ignorant l'heure, vous pouvez utiliser la requête suivante :
SELECT * FROM `table` WHERE DATE(`timestamp`) = CURDATE()
Avertissement :
Bien que cette requête obtienne le résultat escompté, elle peut ne pas fonctionner de manière optimale. L'utilisation de DATE() sur une colonne d'horodatage peut empêcher MySQL d'utiliser efficacement les index de cette colonne.
Pour une solution plus efficace, vous pouvez créer une colonne de date dédiée et stocker la partie date de l'horodatage dans cette colonne. . Cela permet à MySQL d'utiliser un index sur la colonne de date pour une interrogation plus rapide.
Voici un exemple de la façon dont vous pouvez créer une colonne de date dédiée et mettre à jour ses valeurs :
ALTER TABLE `table` ADD COLUMN `date` DATE NOT NULL; UPDATE `table` SET `date` = DATE(`timestamp`);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!