2017-03-18 69 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);