Du kan bruge HOUR() funktion:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Desværre, denne forespørgsels ydeevne vil være forfærdelig , så snart du går over et par tusinde rækker - funktioner kan ikke indekseres, så der vil være en fuld tabelscanning hver gang denne forespørgsel kører.
Hvad vi gjorde i en lignende situation:vi oprettede en anden kolonne updatetime_hour
, indekserede det og udfyldte det ved indsættelse (og opdateret ved opdatering); så bliver forespørgslen hurtig:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Ja, vi har denormaliseret dataene, og det er lidt mere husholdning, men jeg har endnu ikke set en hurtigere løsning. (Vi overvejede og målte indsættelses- og opdateringstriggere for at udfylde updatetime_hour
fra updatetime
, men besluttede sig imod for præstation; se, om de ville være nyttige for dig.)