查询mysql:从时间戳中选择

问题描述:

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

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

非常感谢。

+3

模式?存储此模式的列的数据类型是什么 - DATETIME或VARCHAR/etc? – 2010-08-17 23:18:41

迈克尔介绍的方法工作,但基于字符串,因此效率不高的基于整数的搜索。

我在创建两个UNIX时间戳(一个用于00:00:00,一个用于23:59:59)和检查以确定您是否在此时间内没有看到问题。 (确保实际计算这两个单独的值以确保您考虑夏令时)。

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

如果你有一个小的数据集,迈克尔上面的方法是好的。

+0

+1基于非字符串,很好的信息:) – 2010-08-17 23:36:13

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

很简单:

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

注意,也只会是有效的,如果你的date_column的类型是TIMESTAMP或DATETIME的。

编辑: 由于马丁提出了与性能的一个点,你可能想试试这个,而是如果速度是一个问题(在一个巨大的数据集)。 BETWEEN将使用任何可用的索引。

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

在MySQL中是否可以运行? – 2010-08-18 00:22:48

+0

我不太确定这一点。 – 2010-08-18 01:00:11