mysql的timediff到几个小时

我试图从我的桌子上得到timediff,并将其转换为小时(这是一个小时计费服务)

SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/ 3600 FROM tasks>

其中endDate和startDate是date时间格式

有没有另一种方式(更有效率)做这个任务? 谢谢 !

TIMEDIFF(endDate, startDate)以DateTime格式输出,如此平坦,以时间戳和(60 * 60)

 SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference FROM tasks 

编辑:或者, TimestampDiff也可以提供一个有效的解决scheme,以更优雅的方式提供其示例:

 SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'); 

而你的解决scheme可以是:

 SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different FROM tasks 

注意在这条链上最投票的答案是不正确的! 使用小时只能以整数forms返回小时。 下面将更正最stream行的回答小时为整数和分钟(即6.5小时)。

 TIME_TO_SEC(TIMEDIFF(endDate, startDate))/3600 as hours 
 HOUR(TIMEDIFF(endDate, startDate)) 

可能工作 – 如果我正确地阅读文档。

 TIMESTAMPDIFF(HOUR, startDate, endDate) 

是最好的办法,因为它工作的时间间隔很大,比如

 TIMESTAMPDIFF(HOUR, "2012-01-01 00:00:00", "2050-01-01 00:00:00") 

结果: 333120

 HOUR(TIMEDIFF("2050-01-01 00:00:00", "2012-01-01 00:00:00")) 

结果: 838

失败。

正如我们在上面的例子中看到的,令人惊讶的是甚至超过了2038年的时间戳限制。

HOUR(TIMEDIFF(dateEnd, dateStart))返回的最大小时数为838,因为TIMEDIFF限制在TIME值允许的范围内。

在小时内获得差异:

 Hour(TIMEDIFF(date1,date2)) as Hour1 

为了得到差异:

 Minute(TIMEDIFF(date1,date2)) as Minute1 

为了获得第二个差异:

 Second(TIMEDIFF(date1,date2)) as Second1 

例如:startDate 2010-01-31 00:00:00,endDate 2010-01-31 19:24:22

 SELECT (UNIX_TIMESTAMP(dateFin)-UNIX_TIMESTAMP(dateDebut))/3600 hour_diff FROM tasks SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/3600 FROM tasks 

回报19.4061这是很好的

 SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different FROM tasks 

只返回小时,而我也需要分钟转换。

 SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference FROM tasks 

返回0.我认为第一个是最有效的。 谢谢 !!

您可以使用UNIX_TIMESTAMP在SELECT查询中进行计算。

 SELECT (UNIX_TIMESTAMP(endDate)-UNIX_TIMESTAMP(startDate))/3600 hour_diff FROM tasks 

UNIX_TIMESTAMP将date时间转换为从纪元开始的秒数。 你可以减去两个时间戳,以获得差异。 将其与3600分开会在一小时内给你带来不同。

 TIMEDIFF(endDate, startDate) / 10000 
 select hour(timediff('2017-01-01 00:00:00', '2017-01-01 00:01:00')); return 1 select hour(timediff('2017-01-01 00:01:00', '2017-01-01 00:00:00')); return 1 select time_to_sec(timediff('2017-01-01 00:00:00', '2017-01-01 00:00:05')); return -5 select time_to_sec(timediff('2017-01-01 00:00:00', '2017-01-01 00:00:05'))/60 as 'minutes' ; return -0.0833 

如果你有秒,你可以将其转换为你想要的或什么和小时(..)将不会使用它时,我比较,因为它总是正面的价值