2010-08-17 295 views
1

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

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

非常感谢。

+3

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

回答

1

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

我在创建两个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

1

很简单:

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