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