Вы можете использовать функцию HOUR () :
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Увы, производительность этого запроса будет ужасной , как только вы пройдете несколько тысяч строк - функции не индексируются, поэтому при каждом выполнении этого запроса будет полное сканирование таблицы.
Что мы сделали в аналогичной ситуации: мы создали еще один столбец updatetime_hour
, проиндексировали его и заполнили его при вставке (и обновили при обновлении); тогда запрос становится быстрым:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Да, мы денормализовали данные, и это немного более удобно, но я еще не нашел более быстрого решения. (Мы рассмотрели и измерили триггеры вставки и обновления, чтобы заполнить updatetime_hour
из updatetime
, но решили отказаться от производительности; посмотрите, будут ли они вам полезны.)