我有一个名为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 ......
思想?
答案 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'