SQL查询以查找现在和时间之间的行

时间:2016-06-28 10:42:50

标签: mysql sql datetime

我需要运行一个sql查询来查找介于1小时,1天,1个月等特定时间间隔内的数据行。这里我传递的一个小时或一个月的时间是毫秒,即持续时间长的值,所以下面的查询

BETWEEN (NOW() - INTERVAL " + timeDuration + ") AND NOW() - 我曾经在使用此查询时以字符串(1小时)传递我的持续时间,并且它工作得非常棒

对我没有帮助

任何人都可以帮助获得长时间的查询,可以是1小时,1天,1周,即3600000,86400000等等

3 个答案:

答案 0 :(得分:0)

使用TIMESTAMPADD之类的;)

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

白天:

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

答案 1 :(得分:0)

我昨天遇到了这个问题,我通过查找start_time的UNIX时间戳和end_time = start_time + 3600的UNIX时间戳一小时差异来解决这个问题

我的最终SQL查询只是:"SELECT * FROM *Table* WHERE time > " + str(start_time) + " && time < " + str(end_time)"

这对我有用 - 虽然我在SQL上有点新手:)它根本没有使用中间路线 - 我不太确定这是否会影响性能或者不?我很感激任何评论:)

答案 2 :(得分: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