MySQL:如何在几秒钟内获得两个时间戳之间的差异

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 天)

【讨论】:

以上是关于MySQL:如何在几秒钟内获得两个时间戳之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

计算两个时间戳之间的差异并获得 unix 时间戳的差异

在 Java/Scala 中,如何以最少的代码/以最优雅的方式在几秒钟内获得特定的 UTC 日期?

C++:我将如何获得 unix 时间?

在几秒钟内从 Spring MVC 中的表中获取 400K 数据

MySql 以秒为单位的两个时间戳之间的区别?

如何在postgreSQL中获得精确的日期差异?