Vous pouvez utiliser le HOUR() fonction :
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Hélas, les performances de cette requête seront horribles , dès que vous dépassez quelques milliers de lignes - les fonctions ne sont pas indexables, il y aura donc une analyse complète de la table à chaque exécution de cette requête.
Ce que nous avons fait dans une situation similaire :nous avons créé une autre colonne updatetime_hour
, l'a indexé et l'a rempli lors de l'insertion (et mis à jour lors de la mise à jour) ; alors la requête devient rapide :
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Oui, nous avons dénormalisé les données, et c'est un peu plus de ménage, mais je n'ai pas encore vu de solution plus rapide. (Nous avons considéré et mesuré les déclencheurs d'insertion et de mise à jour pour remplir le updatetime_hour
à partir de updatetime
, mais a décidé contre pour la performance ; voyez si elles vous seraient utiles.)