【问题标题】:MySQL: how to get the difference between two timestamps in secondsMySQL:如何在几秒钟内获得两个时间戳之间的差异
【发布时间】:2011-04-01 11:45:25
【问题描述】:

有没有一种方法可以在 MySQL 中进行查询,以秒为单位提供两个时间戳之间的差异,或者我需要在 PHP 中执行此操作吗?如果是这样,我该怎么做?

【问题讨论】:

    标签: mysql timestamp


    【解决方案1】:

    您可以使用TIMEDIFF()TIME_TO_SEC() 函数,如下所示:

    SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
    +------+
    | diff |
    +------+
    |   60 |
    +------+
    1 row in set (0.00 sec)
    

    您还可以在其他答案中使用UNIX_TIMESTAMP() 函数作为@Amber suggested

    SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') - 
           UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
    +------+
    | diff |
    +------+
    |   60 |
    +------+
    1 row in set (0.00 sec)
    

    如果您使用TIMESTAMP 数据类型,我猜UNIX_TIMESTAMP() 解决方案会稍微快一些,因为TIMESTAMP 值已经存储为一个整数,表示自纪元以来的秒数(Source )。引用docs

    UNIX_TIMESTAMP() 用于TIMESTAMP 列时,函数直接返回内部时间戳值,没有隐式的“字符串到Unix 时间戳”转换。

    请记住 TIMEDIFF() return data type of TIMETIME 值的范围可能从“-838:59:59”到“838:59:59”(大约 34.96 天)

    【讨论】:

    • 您也可以使用TIMESTAMPDIFF,它在单个函数中完成 - 只需将unit 参数设置为SECOND
    【解决方案2】:

    “TIMESTAMPDIFF”怎么样:

    SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
    

    https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff

    【讨论】:

    • 如果您的日期列是除 YYYY-MM-DD 以外的另一种形式,请尝试这样做:在 TIMESTAMPDIFF 函数中为需要更正格式的列提供str_to_date(date_column, '%m/%d/%Y')
    • 这对我来说是一个更好的答案,因为TIME_TO_SEC3020399 处达到最大值,而这会返回正确的值。
    • 请注意,MySQL 从第一个日期中减去第二个日期,而不是相反。呃。
    • 我不喜欢这种方法,因为它不圆。我更喜欢:TIMESTAMPDIFF(SECOND, start_date, end_date) / 3600.0
    【解决方案3】:
    UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
    

    如果您需要无符号差异,请在表达式周围添加 ABS()

    或者,您可以使用TIMEDIFF(ts1, ts2),然后使用TIME_TO_SEC() 将时间结果转换为秒。

    【讨论】:

      【解决方案4】:

      请注意,TIMEDIFF() 解决方案仅在 datetimes 相隔小于 35 天 时有效! TIMEDIFF() 返回 TIME 数据类型,TIME 的最大值为 838:59:59 小时(=34.96 天)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 2018-11-08
        • 2020-11-25
        • 2014-05-04
        相关资源
        最近更新 更多