【问题标题】:Select mysql between last 1 hour在过去 1 小时之间选择 mysql
【发布时间】:2019-05-17 11:12:43
【问题描述】:

我想知道是否有人可以帮助我。我试图从我的表中选择该表中过去一小时内的记录。但出于某种原因,它会不断返回所有记录。

finished
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 13:00:00
2019-05-17 13:00:00
2019-05-17 13:00:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00

这是我的查询:

SELECT *
FROM people
WHERE finished > DATE_SUB(NOW(), INTERVAL 1 HOUR)

我在下午 12 点运行了查询,并希望只在晚上 11 点到 12 点之间记录。如果我稍后再运行它 - 比如说下午 3 点,我希望记录在下午 2 点到 3 点之间。 有什么我做错了吗?请帮忙。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果表格可以有未来的事件,你也必须指定上限。

    SELECT *
           FROM people
           WHERE finished >= date_sub(now(), INTERVAL 1 HOUR)
                 AND finished < now();
    

    【讨论】:

    • 太棒了,这似乎是我要找的:)
    【解决方案2】:

    您正在做的是,您在12 上说,向我显示所有时间戳大于11 的数据

    DATE_SUB(NOW(), INTERVAL 1 HOUR)
    

    将导致

    2019-05-17 11:00:00
    

    2019-05-17 12:00:00
    

    所以你的查询看起来像

    SELECT *
    FROM people
    WHERE finished > 2019-05-17 11:00:00
    

    因此您的时间戳为2019-05-17 12:55:00 的记录将满足上述条件并显示在结果中。

    为了达到您想要的结果,您必须在查询中添加上限

    SELECT *
    FROM people
    WHERE finished > DATE_SUB(NOW(), INTERVAL 1 HOUR) and finished <= NOW();
    

    【讨论】:

      【解决方案3】:

      使用BETWEEN 是另一种选择。确保运行 SELECT NOW() 以确保您不需要修复时区或其他东西。

      SELECT * FROM people
      WHERE finished BETWEEN DATE_SUB(NOW(), INTERVAL 3600 SECOND) AND NOW();
      

      【讨论】:

        【解决方案4】:
        SELECT *
        FROM people
        WHERE finished > NOW() - INTERVAL 1 HOUR;
        

        "NOW() - INTERVAL 1 HOUR" 将返回从现在起 1 小时的时间戳。 因此,“finished >NOW() - INTERVAL 1 HOUR”会将您数据库中的时间戳与从现在起 1 小时前的时间进行比较。

        【讨论】:

        • 这是完全相同的查询。 EXPLAIN EXTENDED SELECT * FROM people WHERE finished &gt; DATE_SUB(NOW(), INTERVAL 1 HOUR); 输出:select id , finished from people where finished &gt; (now() - interval 1 hour);
        • 请在您的答案中添加一些解释,以便其他人可以从中学习
        猜你喜欢
        • 2013-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-20
        • 1970-01-01
        • 1970-01-01
        • 2014-08-07
        • 1970-01-01
        相关资源
        最近更新 更多