【问题标题】:SQL query to find rows between now and time in longSQL查询以查找从现在到时间之间的行
【发布时间】:2016-06-28 10:42:50
【问题描述】:

我需要运行 sql 查询来查找介于 1 小时、1 天、1 个月等特定时间间隔之间的数据行。这里我经过的一个小时或一个月的时间以毫秒为单位,即持续时间的长值所以下面的查询

BETWEEN (NOW() - INTERVAL " + timeDuration + ") AND NOW() - 我曾经在使用此查询时以字符串(1 小时)的形式传递我的持续时间,它的效果很棒

对我没有帮助

任何人都可以帮助获取 Long time duration 的 between 查询,可以是 1 小时、1 天、1 周,即 3600000,86400000 等等

【问题讨论】:

  • 在评论中您提到了需要日期过滤器的内容。请edit您的问题包括您的完整要求。

标签: mysql sql datetime


【解决方案1】:

使用TIMESTAMPADD点赞;)

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

一天:

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

【讨论】:

  • 我想要一个日期过滤器并且我有多天的数据
【解决方案2】:

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

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

这对我有用 - 虽然我在 SQL 方面有点新手 :) 它根本不使用 between 路由 - 我不太确定这是否会影响性能?我会很感激这方面的任何 cmets :)

【讨论】:

    【解决方案3】:

    您似乎没有完全正确地制定您的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
    

    【讨论】:

    • 我可以在 mysql 中使用 DateAdd 方法吗? " BETWEEN DATEADD('SS', ?, now()) 和 now()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2020-09-17
    • 2011-04-19
    • 1970-01-01
    • 2014-12-06
    相关资源
    最近更新 更多