Puoi usare HOUR() funzione:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Purtroppo, le prestazioni di questa query saranno orribili , non appena si superano alcune migliaia di righe, le funzioni non sono indicizzabili, quindi verrà eseguita un'analisi completa della tabella ogni volta che viene eseguita questa query.
Cosa abbiamo fatto in una situazione simile:abbiamo creato un'altra colonna updatetime_hour
, l'ha indicizzato e lo ha popolato all'inserimento (e aggiornato all'aggiornamento); quindi la query diventa veloce:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Sì, abbiamo denormalizzato i dati ed è un po' più pulito, ma devo ancora vedere una soluzione più veloce. (Abbiamo considerato e misurato i trigger di inserimento e aggiornamento per popolare il updatetime_hour
da updatetime
, ma ha deciso di non farlo per le prestazioni; vedi se ti possono essere utili.)