Je zou de HOUR() kunnen gebruiken functie:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Helaas, de prestaties van deze zoekopdracht zijn vreselijk , zodra u over een paar duizend rijen gaat - functies zijn niet indexeerbaar, dus er zal elke keer dat deze query wordt uitgevoerd een volledige tabelscan zijn.
Wat we deden in een vergelijkbare situatie:we hebben een andere kolom gemaakt updatetime_hour
, geïndexeerd en ingevuld bij invoegen (en bijgewerkt bij update); dan wordt de vraag snel:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Ja, we hebben de gegevens gedenormaliseerd en het is een beetje meer huishoudelijk werk, maar ik heb nog geen snellere oplossing gezien. (We hebben invoeg- en update-triggers overwogen en gemeten om de updatetime_hour
in te vullen van updatetime
, maar besloot tegen voor prestaties; kijk of ze nuttig voor je zijn.)