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 ofTIME
。TIME
值的范围可能从“-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_SEC
在3020399
处达到最大值,而这会返回正确的值。
请注意,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:如何在几秒钟内获得两个时间戳之间的差异的主要内容,如果未能解决你的问题,请参考以下文章
在 Java/Scala 中,如何以最少的代码/以最优雅的方式在几秒钟内获得特定的 UTC 日期?