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

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

谢谢

【问题讨论】:

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

标签: sql mysql timestamp


【解决方案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))
猜你喜欢
  • 2021-01-04
  • 2021-05-14
  • 1970-01-01
  • 2012-07-22
  • 2015-06-17
  • 2014-02-26
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多