Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql - pesquisa timestamp por hora do dia


Você pode usar o HOUR() função:
SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9

Infelizmente, o desempenho desta consulta será horrível , assim que você passar por alguns milhares de linhas - as funções não são indexáveis, portanto, haverá uma verificação completa da tabela toda vez que essa consulta for executada.

O que fizemos em uma situação semelhante:criamos outra coluna updatetime_hour , indexou-o e preencheu-o na inserção (e atualizado na atualização); então a consulta se torna rápida:
SELECT * FROM 'table' WHERE `updatetime_hour` = 9

Sim, desnormalizamos os dados e é um pouco mais de limpeza, mas ainda não vi uma solução mais rápida. (Consideramos e medimos os acionadores de inserção e atualização para preencher o updatetime_hour de updatetime , mas decidiu contra por desempenho; veja se eles seriam úteis para você.)