2010-08-10 264 views
2

我有記錄在mysql表中,我想知道最近3,7和12小時有多少記錄。那會是什麼sql?在格式我的日期字段作爲在過去幾個小時內的SQL記錄

2010-08-09 09:52:27 
2010-08-09 09:52:27 
2010-08-09 09:52:27 
2010-08-09 10:44:46 
2010-08-09 10:44:46 
2010-08-09 11:58:27 
2010-08-09 14:48:22 
2010-08-09 14:48:22 

回答

7

在過去的三年時間:

WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 3 HOUR) 
       AND NOW() 

過去七年時間:

WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 7 HOUR) 
       AND NOW() 

對於過去十二個月時間:

WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 12 HOUR) 
       AND NOW() 

如果您想要指定數據作爲一個字符串,使用方法:

WHERE column BETWEEN DATE_SUB(STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T'), INTERVAL 3 HOUR) 
       AND STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T') 

...雖然說實話,你可以使用這個一樣好:

WHERE column BETWEEN STR_TO_DATE('2010-07-08 04:57:45', '%Y-%m-%d %T') 
       AND STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T') 

如果不工作,那麼我想知道如果列將值存儲爲字符串/ varchar而不是DATETIME。

參考:

+0

我用了下面的查詢,但它沒有給我正確的結果 $ sql ='SELECT * FROM'order' WHERE myDateField BETWEEN DATE_SUB(「2010-07-08 07:57:45」,INTERVAL 3 HOUR) AND「2010-07-08 07:57:45」'; – Autolycus 2010-08-11 00:17:18

+0

@ user295189:使用單引號,而不是雙引號。如果您使用的是字符串,請使用'STR_TO_DATE('2010-07-08 07:57:45','%Y-%m-%d%T')'將字符串可靠地轉換爲DATETIME – 2010-08-11 00:21:54

+0

不工作..仍然給我只有2記錄相同的日期和時間-07-08 07:57:45' – Autolycus 2010-08-11 00:29:53

1

假設沒有記錄承擔在未來時間戳,您可以使用:

WHERE myDateField > DATE_SUB(NOW(), INTERVAL 3 HOUR) 

用於記錄的最後三個小時的價值,並且同樣地持續7和12小時。

相關問題