2017-03-18 96 views
0

我被困在SQL特定场景中的几天。该方案是如下,选择存储为Unix时间戳的日期并与给定的Unix时间戳进行比较

我有一个表,让我们把它叫做traffic其中有2列 - >date和'车辆(以及更多,但这些是两个我需要匹配)。

日期列存储为Unix时间戳。现在只需比较当前日期(从time()函数获得),但这里的诀窍是这些日期中的一些还有时间附加在它们上面。

例如,如果您运行strtotime(13-02-2017 13:00)和strtotime(13-02-2017),则会得到2个不同的结果。基本上我只关心匹配日期而不是时间。

所以我需要一些方法来选择那些等于当前的Unix时间戳,但与招上面解释数据库vehicledate,所以我只需要多只,如果可能的日期。

+0

['DATE()'](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date),也许。正如'WHERE DATE(date)= DATE(CURRENT_TIMESTAMP)' – bishop

回答

1

您可以使用FROM_UNIXTIME()将时间戳转换为日期时间,然后使用DATE()函数获取日期部分。

WHERE DATE(FROM_UNIXTIME(date)) = CURDATE() 

但是,这不能使用索引,所以另一种方式,可以让使用索引的是检查,如果它在一个范围内的时间戳为当前日期:

WHERE date BETWEEN UNIX_TIMESTAMP(CURDATE()) AND UNIX_TIMESTAMP(CURDATE()) + 86399 

(一天有86400秒)。

+0

这工作正常,但是当我做WHERE DATE(FROM_UNIXTIME(date))= 2017-03-18它由于某种原因失败,原因我想这是因为有时日期是动态选择的,即它可能不需要等于现在。 – Eilleen

+0

您需要将'2017-03-18'放在引号中。否则它是减去数字,它是1996 – Barmar

+0

非常感谢你的工作...你为我节省了很多麻烦,因为我最初提取所有内容,然后用php检查日期,这在真实世界中会非常缓慢,并带有真实数据。 – Eilleen

0
SELECT * FROM traffic WHERE DATE(date) = DATE(CURRENT_TIMESTAMP);