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

Posted

技术标签:

【中文标题】MySql 以秒为单位的两个时间戳之间的区别?【英文标题】:MySql difference between two timestamps in Seconds? 【发布时间】:2011-05-17 01:39:06 【问题描述】:

是否可以计算mysql中两个时间戳之间的差异并以秒为单位获得输出结果?比如 2010-11-29 13:16:55 - 2010-11-29 13:13:55 应该给 180 秒。

谢谢

【问题讨论】:

一天前有人问了一个非常相似的问题:***.com/questions/4289828/… @Orbling:不,结果很不一样,因为输出是hh:mm:ss @OMG 我对这个问题的回答,即已接受的问题,在 hh:mm:ss 中 - 其他答案不是,因此它包括他的回答。您在下面重申了这一点。 【参考方案1】:

我认为公认的答案不是一个好的通用解决方案!

这是因为 UNIX_TIMESTAMP() 函数对于 1970 年 1 月 1 日之前的日期(以及使用 32 位整数的远期日期)失败。这在许多活着的人出生那天可能很容易发生。

更好的解决方案是:

SELECT TIMESTAMPDIFF(SECOND, '2010-11-29 13:13:55', '2010-11-29 13:16:55')

也可以修改为返回 DAY YEAR MONTH HOUR 和 MINUTE!

【讨论】:

是他们将结果转换为 hr:min:sec 格式的任何方式吗? 这非常有效。然而,答案是相反的(第二个日期 - 第一个日期)就是答案。 TIMESTAMPDIFF(YEAR, '2016-01-01 00:00:00', '2015-01-01 00:00:00') 返回 -1 而不是 1。谢谢 @Kareem :OP 想要 180 作为结果。这就是我的示例代码给出的。 @coolDude: SELECT SEC_TO_TIME(TIMESTAMPDIFF(SECOND, '2010-11-29 13:13:55', '2010-11-29 13:16:55')) 可以解决问题。 @OderWat 感谢您的回复.. 我解决了很久以前的问题 SELECT SEC_TO_TIME(TIMESTAMPDIFF(SECOND, StartTime, EndTime)) as executionTime from abc【参考方案2】:

使用UNIX_TIMESTAMP function 将 DATETIME 转换为以秒为单位的值,从 1970 年 1 月 1 日开始:

SELECT UNIX_TIMESTAMP('2010-11-29 13:16:55') - UNIX_TIMESTAMP('2010-11-29 13:13:55') as output

结果:

output
-------
180

如果您不确定哪个值大于另一个值,这是一种简单的处理方法——使用ABS function:

SELECT ABS(UNIX_TIMESTAMP(t.datetime_col1) - UNIX_TIMESTAMP(t.datetime_col2)) as output

【讨论】:

1970-01-01 之前的 DATE 失败 谢谢,詹姆斯。我会把它交给我的其他人。我老了,所以对我来说几秒钟内过生日很重要。 :oP【参考方案3】:

TIMESTAMPDIFF 方法仅适用于日期时间格式。如果您想要两个时间之间的差异,例如 '11:10:00' 减去 '10:20:00' 然后使用

select TIME_TO_SEC('11:10:00')-TIME_TO_SEC('10:20:00')

【讨论】:

TIMESTAMPDIFF 将适用于“时间”数据类型。选择 TIMESTAMPDIFF(MINUTE , cast('08:22:03' as time), cast('09:59:03' as time))

以上是关于MySql 以秒为单位的两个时间戳之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JOOQ 在 PostgreSQL 中以秒为单位查找和求和时间戳之间的差异

如何从给定城市的给定日期和时间获取 unix 纪元时间戳(以秒为单位)?

计算 SQL 中组的重叠时间(以秒为单位)

从 Avro 将 unix 时间戳(以秒为单位)导入 Bigquery 中的正确时间戳

mysql查询两个日期的时间间隔,以秒为单位

以秒为单位的转换时间戳值不会反转为 python 中的原始时间戳