mysql timediff到几个小时

时间:2010-02-01 00:41:32

标签: php mysql

我正试图从我的桌子上获取timediff并将其转换为几小时(这是一个小时计费服务)

  

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

其中endDate和startDate采用日期时间格式

还有另一种方法(更有效率)来完成这项任务吗? 谢谢!

10 个答案:

答案 0 :(得分:35)

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

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

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

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

您的解决方案可以是:

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

答案 1 :(得分:28)

注意此链中投票最多的答案是错误的!使用HOUR只会返回整数小时。下面将纠正最流行的答案,以小时为单位返回小时数,以小时为单位(即6.5小时)。

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

答案 2 :(得分:11)

HOUR(TIMEDIFF(endDate, startDate))

可能有用 - 如果我正确阅读文档。

答案 3 :(得分:8)

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值允许的范围。

答案 4 :(得分:6)

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

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

UNIX_TIMESTAMP将datetime转换为epoch的秒数。您可以减去两个时间戳以获得第二个差异。用3600除以它会给你不同的小时。

答案 5 :(得分:5)

例如: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。 我认为第一个是最有效的。谢谢!!

答案 6 :(得分:5)

获得小时差异:

Hour(TIMEDIFF(date1,date2)) as Hour1

获得分钟差异:

Minute(TIMEDIFF(date1,date2)) as Minute1

让Diffrence获得第二名:

Second(TIMEDIFF(date1,date2)) as Second1

答案 7 :(得分:1)

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  

如果你有秒,你可以根据需要或什么来转换它 当我比较时,小时(...)不会使用它,因为它总是具有正面价值

答案 8 :(得分:1)

你可以使用mysql funcion timestampdiff,如下所示

TIMESTAMPDIFF(HOUR, '2018-06-01 00:00:00', '2018-06-01 12:00:00') 

答案 9 :(得分:0)

TIMEDIFF(endDate, startDate) / 10000