2011-09-30 73 views
12

我試圖做一個查詢,基於時間戳帶回結果,比如30分鐘的時間間隔。mySQL SELECT timestamp(now() - 3000);

所以我想通了,是我可以

SELECT * FROM x WHERE ts BETWEEN timestamp(now()-3000) AND timestamp(now()) 

因此,這將X與最後30分鐘內列TS時間戳查詢一切。

但是,這隻能在now()超過yyyy-mm-dd HH:30:00標記之後才起作用,因爲它在任何時候都會導致NULL ...這很麻煩,我不明白爲什麼它不會只是從小時中減去冰點分鐘!

請幫我一把!在過去的30分鐘內,我找不到任何其他方法進行查詢,這就是我想要實現的。

最好的問候,

約翰

回答

34
SELECT * FROM x WHERE ts BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 30 MINUTE)) AND timestamp(NOW()) 
1

首先,你需要認識到,時間戳()返回以秒爲Unix時間戳。 3000秒不是30分鐘,應該是1800秒。嘗試

+0

其實當我減去1800它只減去18秒所以... – Theveloper

+0

@Theveloper啊應該是unix_timestamp,沒有看到那部分。時間戳的格式不同,您不能一致地進行數學運算。 – mugetsu

11
SELECT * FROM x WHERE ts BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW(); 
2
SELECT * FROM x 
WHERE ts BETWEEN TIMESTAMPADD(MINUTE, -30, NOW()) AND NOW(); 
0
SELECT * FROM (`yourdb`) WHERE `timestamp` BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW(); 
1

對於我來說,什麼工作是下面的查詢

select * from x where (now() - ts) < 180000 

180000是30分鐘,因爲6000毫秒爲1分鐘