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 纪元时间戳(以秒为单位)?