查询mysql:从时间戳中选择

时间:2010-08-17 23:15:17

标签: php mysql

我想从表中选择与特定日期对应的所有行。 我将时间戳存储在模式2010-08-18 04:43:00中。 如果我想选择一天内所有行,我该如何查询该表?

我能想到的一种方法是获取当天的时间戳,将其转换为Unix时间戳,然后查询表。但这听起来像是很多工作。有没有更容易的替代方案?

提前多多感谢。

3 个答案:

答案 0 :(得分:1)

SELECT *
FROM `table_name`
WHERE `date_column` LIKE '2010-08-17 %';

或者:

SELECT *
FROM `table_name`
WHERE DAY( `date_column` ) = 17
AND MONTH( `date_column` ) = 08
AND YEAR( `date_column` ) = 2010
LIMIT 0 , 30

参考:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

答案 1 :(得分:1)

Michael概述的方法有效,但基于字符串,因此不如基于整数的搜索有效。

我真的没有看到创建两个UNIX时间戳的问题,一个用于00:00:00,另一个用于23:59:59,并检查是否属于该时间。 (请务必实际计算这两个单独的值,以确保您考虑夏令时)。

如果你真的不想自己动手(SELECT UNIX_TIMESTAMP("$Timestamp 00:00:00"), UNIX_TIMESTAMP("$Timestamp 23:59:59")),你甚至可以使用MySQL获取这些值,然后使用这两个值。

如果你有一个小数据集,Michael的方法就可以了。

答案 2 :(得分:1)

很简单:

SELECT *
FROM `table_name`
WHERE DATE(`date_column`) = '2010-08-17';

请注意,只有date_column类型为TIMESTAMP或DATETIME才会有效。

修改 由于Martin提出了与性能相关的观点,如果速度是一个问题(在庞大的数据集上),你可能想尝试这一点。 BETWEEN将使用任何可用的索引。

SELECT *
FROM `table_name`
WHERE `date_column` BETWEEN '2010-08-17 00:00:00' AND '2010-08-17 23:59:59';