Możesz użyć GODZINA() funkcja:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Niestety, skuteczność tego zapytania będzie straszna , jak tylko przejdziesz przez kilka tysięcy wierszy - funkcje nie są indeksowalne, więc przy każdym uruchomieniu tego zapytania nastąpi pełne skanowanie tabeli.
Co zrobiliśmy w podobnej sytuacji:utworzyliśmy kolejną kolumnę updatetime_hour
, zindeksował go i wypełnił przy wstawieniu (i zaktualizował przy aktualizacji); wtedy zapytanie staje się szybkie:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Tak, zdenormalizowaliśmy dane i jest to trochę bardziej porządkowe, ale nie widzę jeszcze szybszego rozwiązania. (Rozważyliśmy i zmierzyliśmy wyzwalacze wstawiania i aktualizacji, aby wypełnić updatetime_hour
z updatetime
, ale odmówiono wykonania; sprawdź, czy byłyby dla Ciebie przydatne).