2016-06-28 76 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 –