Answers:
您可以使用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)
您还可以使用其他答案中建议的@AmberUNIX_TIMESTAMP()
函数:
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)以来的秒数。引用文档:
在列
UNIX_TIMESTAMP()
上使用时TIMESTAMP
,该函数直接返回内部时间戳记值,而没有隐式的“字符串到Unix时间戳记”转换。请注意,
TIMEDIFF()
返回数据类型为TIME
。TIME
值的范围可以从“ -838:59:59”到“ 838:59:59”(大约34.96天)
“ TIMESTAMPDIFF”如何:
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/zh-CN/date-and-time-functions.html#function_timestampdiff
str_to_date(date_column, '%m/%d/%Y')
在TIMESTAMPDIFF函数中,需要更正其格式的列。
TIME_TO_SEC
最大化了,3020399
而这将返回正确的值。
unit
参数设置为即可SECOND
。