我正试图从我的桌子上获取timediff并将其转换为几小时(这是一个小时计费服务)
SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/ 3600 FROM tasks>
其中endDate和startDate采用日期时间格式
还有另一种方法(更有效率)来完成这项任务吗?谢谢 !
Tra*_*v L 37
TIMEDIFF(endDate, startDate) DateTime格式的输出,如此平坦,以时间戳和devide(60*60)
SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference
FROM tasks
Run Code Online (Sandbox Code Playgroud)
编辑:或者, TimestampDiff也可以更优雅的方式提供有效的解决方案,提供其示例:
SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
Run Code Online (Sandbox Code Playgroud)
您的解决方案可以是:
SELECT TIMESTAMPDIFF(HOUR, startDate, endDate) AS hours_different
FROM tasks
Run Code Online (Sandbox Code Playgroud)
Fun*_*Doc 28
注意这个链中投票最多的答案是不正确的!使用HOUR只会返回整数小时.下面将纠正最常见的答案,以小时为单位返回小时(小时为6.5小时).
TIME_TO_SEC(TIMEDIFF(endDate, startDate))/3600 as hours
Run Code Online (Sandbox Code Playgroud)
Joe*_*oey 12
HOUR(TIMEDIFF(endDate, startDate))
Run Code Online (Sandbox Code Playgroud)
可能有用 - 如果我正确地阅读文档.
小智 9
TIMESTAMPDIFF(HOUR, startDate, endDate)
Run Code Online (Sandbox Code Playgroud)
是最好的方法,因为它适用于很长的时间间隔,比如
TIMESTAMPDIFF(HOUR, "2012-01-01 00:00:00", "2050-01-01 00:00:00")
Run Code Online (Sandbox Code Playgroud)
结果: 333120
而
HOUR(TIMEDIFF("2050-01-01 00:00:00", "2012-01-01 00:00:00"))
Run Code Online (Sandbox Code Playgroud)
结果: 838
失败.
正如我们在上面的例子中看到的那样,它甚至超出了2038年的时间戳限制.
返回的最大小时数HOUR(TIMEDIFF(dateEnd, dateStart))是838,因为TIMEDIFF它限制在允许的TIME值范围内.
您可以使用UNIX_TIMESTAMP在SELECT查询中进行计算.
SELECT (UNIX_TIMESTAMP(endDate)-UNIX_TIMESTAMP(startDate))/3600 hour_diff
FROM tasks
Run Code Online (Sandbox Code Playgroud)
UNIX_TIMESTAMP将datetime转换为epoch的秒数.您可以减去两个时间戳以获得第二个差异.用3600除以它会给你不同的小时.
例如: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
Run Code Online (Sandbox Code Playgroud)
返回19.4061,这很好
SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different
FROM tasks
Run Code Online (Sandbox Code Playgroud)
只返回几小时,我还需要转换分钟.
SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference
FROM tasks
Run Code Online (Sandbox Code Playgroud)
返回0.我认为第一个是最有效的.谢谢 !!
Rik*_*ik 5
在小时内获得差异:
Hour(TIMEDIFF(date1,date2)) as Hour1
Run Code Online (Sandbox Code Playgroud)
在分钟中获得差异:
Minute(TIMEDIFF(date1,date2)) as Minute1
Run Code Online (Sandbox Code Playgroud)
获得第二个差异:
Second(TIMEDIFF(date1,date2)) as Second1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66943 次 |
| 最近记录: |