2010-08-20 96 views

回答

110

您可以使用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

16
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天)

相关问题