我正试图从我的桌子上获取timediff并将其转换为几小时(这是一个小时计费服务)
SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/ 3600 FROM tasks>
其中endDate和startDate采用日期时间格式
还有另一种方法(更有效率)来完成这项任务吗? 谢谢!
答案 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