Du kan använda HOUR() funktion:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Tyvärr, den här frågans prestanda kommer att vara hemsk , så snart du går över några tusen rader - funktioner är inte indexerbara, så det kommer att göras en fullständig tabellsökning varje gång den här frågan körs.
Vad vi gjorde i en liknande situation:vi skapade en annan kolumn updatetime_hour
, indexerade det och fyllde i det vid infogning (och uppdaterade vid uppdatering); då blir frågan snabb:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Ja, vi har avnormaliserat data, och det är lite mer hushållning, men jag har ännu inte sett en snabbare lösning. (Vi övervägde och mätte utlösare för infogning och uppdatering för att fylla i updatetime_hour
från updatetime
, men beslutade sig emot för prestation; se om de skulle vara användbara för dig.)