2016-06-28 70 views
0

我需要運行一個sql查詢來查找落在1小時,1天,1個月等特定時間間隔內的數據行。這裏一個小時或一個月我傳遞的時間以毫秒即持續時間長的值,所以下面的查詢SQL查詢在很長時間內查找現在和時間之間的行

BETWEEN (NOW() - INTERVAL " + timeDuration + ") AND NOW() - 我用來打發我的時間長度字符串(1小時),而使用此查詢和它的工作真棒

是沒有幫助的,以我

誰能幫助獲得查詢持續時間很長,可以爲1小時,1天,1周即3600000,86400000等

之間的
+0

在評論中,你提到了一些關於需要日期過濾器的內容。請[編輯]您的問題以包含您的完整要求。 –

回答

0

使用TIMESTAMPADD like;)

BETWEEN TIMESTAMPADD(HOUR, -1, NOW()) AND NOW() 

而對於天:

BETWEEN TIMESTAMPADD(DAY, -1, NOW()) AND NOW() 
+0

我想要一個日期過濾器以及我有多個日期的數據 –

0

我昨天剛有這個問題,我通過查找UNIX時間戳,start_time和UNIX時間戳,end_time = start_time + 3600了一個小時的時差

解決它

我最後的SQL查詢很簡單:"SELECT * FROM *Table* WHERE time > " + str(start_time) + " && time < " + str(end_time)"

這對我很有效 - 雖然我有點像ro okie在SQL :)它根本不使用路由之間 - 我不太確定這是否會帶來性能問題?我會很感激這方面的任何意見:)

0

它看起來像你沒有正確地制定你的WHERE條款。試試這樣:

WHERE my_datetime BETWEEN NOW() - INTERVAL 3600 SECOND AND NOW() 

INTERVAL...形式的時間算術需要你給出時間單位。 available units are MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, and YEAR.

my_datetime列的數據類型很重要。除非你向我們透露它,否則很難給出確切的答案。

如果列同時包含日期和時間,並要在廣泛範圍的日期過濾器,你可以這樣做:

WHERE DATE(my_datetime) BETWEEN DATE(NOW()) - 25 YEAR /* slow !!! */ 
           AND DATE(NOW()) 

但是,該DATE()功能適用於您的列,所以防止使用索引。

你需要這樣的:

WHERE my_datetime >= CURDATE() - 25 YEAR 
    AND my_datetime < CURDATE() + 1 DAY 

這將拿起my_datetime之前的所有值,但不包括明天午夜。

請注意,您可以在INTERVAL子句中使用非常大的值(雙精度浮點數)。例如,這兩個值產生相同的結果。

NOW()+ INTERVAL 100000 DAY 
NOW()+ INTERVAL 8640000000000000 MICROSECOND 
+0

我可以在mysql中使用DateAdd方法嗎? ('SS',?,now())和now()之間的差異( )「DATEADD –