【问题标题】:Comparing the database timestamp to the present time将数据库时间戳与当前时间进行比较
【发布时间】:2019-03-25 15:11:32
【问题描述】:

我在 MySQL 数据库中有许多记录,其中一个字段跟踪记录的创建时间。它属于“时间戳”类型,默认设置为 CURRENT_TIMESTAMP。我正在尝试访问所有超过 5 分钟的记录。我在 PHP 页面中使用了以下查询:

SELECT username FROM liveusers WHERE timejoined < NOW() - INTERVAL 5 MINUTE)

由于某种原因,它没有选择任何记录,我不知道如何纠正它。 PHP 代码很好,因为如果我删除条件,它会选择所有记录。我做错了什么?

【问题讨论】:

  • 只使用timejoined &gt; NOW() - INTERVAL 5 MINUTE,末尾不带括号)

标签: mysql sql


【解决方案1】:

我建议你使用 DATE_SUB:

SELECT username FROM liveusers WHERE timejoined > DATE_SUB(NOW(),INTERVAL 5 MINUTE);

https://www.w3schools.com/sql/func_mysql_date_sub.asp

您正在以相反的方式进行比较。较新的记录的日期应早于 5 分钟前。

【讨论】:

    【解决方案2】:

    首先,您将时间戳与日期进行比较。您想首先对日期进行转换,例如,使用UNIX_TIMESTAMP()

    5 分钟是 300 秒。假设有人在 50 岁加入,NOW() 是 301(应该是 "newer")。 WHERE timejoined &lt; UNIX_TIMESTAMP(NOW() - INTERVAL 5 MINUTE) 将变为 -> WHERE 50 &lt; 301 - 300

    你想写:

    WHERE timejoined > UNIX_TIMESTAMP(NOW() - INTERVAL 5 MINUTE)
    

    架构 (MySQL v5.7)


    查询 #1

    SELECT UNIX_TIMESTAMP(NOW() - INTERVAL 4 MINUTE) > UNIX_TIMESTAMP(NOW() - INTERVAL 5 MINUTE) AS "is 4 minutes ago \"newer\" ?";
    
    | is 4 minutes ago "newer" ? |
    | -------------------------- |
    | 1                          |
    

    查询 #2

    SELECT UNIX_TIMESTAMP(NOW() - INTERVAL 6 MINUTE) > UNIX_TIMESTAMP(NOW() - INTERVAL 5 MINUTE) AS "is 6 minutes ago \"newer\" ?";
    
    | is 6 minutes ago "newer" ? |
    | -------------------------- |
    | 0                          |
    

    View on DB Fiddle

    【讨论】:

    • + 0 不会正确地将日期时间转换为 real unix 时间戳,请参阅 demo
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2017-05-03
    • 2013-10-09
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多