mysql - 按小时搜索时间戳

时间:2011-02-01 17:19:34

标签: sql mysql database

我有一个名为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 ......

思想?

5 个答案:

答案 0 :(得分:17)

您可以使用HOUR()功能:

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

唉,这个查询的性能将是可怕的,一旦你超过几千行 - 函数不可索引,所以每次运行这个查询时都会有一个完整的表扫描。

我们在类似情况下做了什么:我们创建了另一个列updatetime_hour,将其编入索引,并在插入时填充(并在更新时更新);然后查询变得很快:

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

是的,我们已经对数据进行了非规范化处理,而且还有更多的内务管理,但我还没有看到更快的解决方案。 (我们考虑并测量了插入和更新触发器,以便从updatetime_hour填充updatetime,但决定是否反对性能;看看它们是否对您有用。)

答案 1 :(得分:1)

尝试HOUR()

SELECT * FROM table WHERE HOUR(updatetime) = 9;

这将返回09:00:00至09:59:59之间的所有行。

HOUR()只返回日期的小时部分。

答案 2 :(得分:1)

SELECT * FROM table WHERE hour('updatetime') = 9;

将返回上午9点..

答案 3 :(得分:0)

可能性: SELECT * FROM 'table' WHERE HOUR(updatetime)='09';

答案 4 :(得分:0)

这些答案不起作用,这只适用于我

SELECT hour(FROM_UNIXTIME(`updatetime`)) AS date_formatted FROM `table` where hour(FROM_UNIXTIME(`updatetime`))='9'