MySQL:如何在几秒钟内获得两个时间戳之间的差异

问题描述:

有没有一种方法可以在MySQL中进行查询,这会在几秒钟内给出两个时间戳之间的差异,还是我需要在PHP中执行该操作?如果是这样,我会怎么做呢?MySQL:如何在几秒钟内获得两个时间戳之间的差异

您可以使用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在其他答案:如果您使用的是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) 

数据类型,我猜UNIX_TIMESTAMP()解决方案会稍微快一点,因为TIMESTAMP值已经存储为一个整数,表示数字自纪元以来的秒数(Source)。引述docs

UNIX_TIMESTAMP()上一个TIMESTAMP柱使用的,功能直接返回内部的时间戳值,没有隐含的“串到Unix时间戳”的转换。请注意,TIMEDIFF()return data type of TIMETIME值的范围可以从 '-838:59:59' 到 '838:59:59'(大致34.96天)

+10

也可以使用[TIMESTAMPDIFF](http://dev.mysql.com/ doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff),它在一个函数中完成 - 只需将'unit'参数设置为'SECOND'。 – Mike 2010-08-20 07:33:51

+0

+1表现说明。我没有使用UNIX_TIMESTAMP(),因为我认为这需要更多时间。 – elcool 2011-04-22 18:14:26

UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2) 

如果你想要一个无符号差异,在表达式周围加上一个ABS()

或者,您可以使用TIMEDIFF(ts1, ts2),然后使用TIME_TO_SEC()将时间结果转换为秒。

如何

约 “TIMESTAMPDIFF”:

SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics` 

http://www.w3resource.com/mysql/date-and-time-functions/mysql-timestampdiff-function.php

+0

如果您的日期列是YYYY-MM-DD以外的其他形式,请尝试执行此操作:TIMESTAMPDIFF函数中的str_to_date(date_column,'%m /%d /%Y')为需要更正格式的列。 – greaterKing 2017-01-24 00:08:25

请注意,TIMEDIFF()解决方案只适用于datetimes小于35天分开! TIMEDIFF()返回一个数据类型TIME,以及用于TIME的最大值为838:59:59小时(= 34,96天)