Můžete použít HOUR() funkce:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9
Bohužel, výkon tohoto dotazu bude příšerný , jakmile překročíte několik tisíc řádků – funkce nejsou indexovatelné, takže při každém spuštění tohoto dotazu dojde k úplnému prohledání tabulky.
Co jsme udělali v podobné situaci:vytvořili jsme další sloupec updatetime_hour
, indexoval jej a naplnil jej při vložení (a aktualizoval při aktualizaci); pak se dotaz zrychlí:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9
Ano, data jsme denormalizovali a je to o něco větší úklid, ale ještě jsem neviděl rychlejší řešení. (Zvážili jsme a změřili spouštěče vložení a aktualizace, aby se naplnily updatetime_hour
od updatetime
, ale rozhodl se proti pro výkon; zjistěte, zda by pro vás byly užitečné.)