一尘不染

mysql-按一天中的小时搜索时间戳

sql

我有一个名为列updatetime是一个timestamp。因此,例如,平均外观值可能是:2011-02-01 09:00:51。我希望能够搜索并返回一天中特定时间的所有结果,而不考虑日期。

例如,如果我在列中搜索值BETWEEN 09:00:00 AND 09:59:99,它将返回:

2011-02-01 09:00:51
2011-01-31 09:20:51
2011-01-11 09:55:44
etc....

SELECT * FROM table WHERE updatetime ......

有什么想法吗?


阅读 148

收藏
2021-03-10

共1个答案

一尘不染

您可以使用HOUR()函数:

SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9

las,一旦您查询了几千行,该查询的性能将非常 糟糕 -函数不可索引,因此每次运行此查询时都会进行全表扫描。

在类似情况下的操作:创建了另一列updatetime_hour,对其进行了索引,并在插入时填充了该列(并在更新时进行了更新);然后查询变得很快:

SELECT * FROM 'table' WHERE `updatetime_hour` = 9

是的,我们已经对数据进行了非规范化,并且还需要更多的内务处理,但是我还没有看到更快的解决方案。(我们考虑并测量了插入和更新触发器,以填充updatetime_hourfrom
updatetime,但出于性能考虑而拒绝使用;请查看它们是否对您有用。)

2021-03-10