我想从表中选择与特定日期对应的所有行。
我将时间戳存储在模式2010-08-18 04:43:00
中。
如果我想选择一天内所有行,我该如何查询该表?
我能想到的一种方法是获取当天的时间戳,将其转换为Unix时间戳,然后查询表。但这听起来像是很多工作。有没有更容易的替代方案?
提前多多感谢。
答案 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';