mysql timediff到几个小时

mom*_*omo 39 php mysql

我正试图从我的桌子上获取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)

  • 正确的参数```TIMESTAMPDIFF(HOUR,startDate,endDate)``` (2认同)
  • 请注意,`TIMEDIFF`和`TIMESTAMPDIFF`不考虑夏令时的变化.@Donny Kurnia的答案如果在你的情况下获得/失去的时间是重要的,那么效果最佳. (2认同)

Fun*_*Doc 28

注意这个链中投票最多的答案是不正确的!使用HOUR只会返回整数小时.下面将纠正最常见的答案,以小时为单位返回小时(小时为6.5小时).

TIME_TO_SEC(TIMEDIFF(endDate, startDate))/3600 as hours
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,当OP说"这是一个小时计费服务"时,我想你会想要将任何一小部分向上舍入到下一个小时.所以,是的,另一个人可能是错的,因为他返回一个INTEGER,但听起来OP想要一个整数**四舍五入** (2认同)

Joe*_*oey 12

HOUR(TIMEDIFF(endDate, startDate))
Run Code Online (Sandbox Code Playgroud)

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

  • 不要忘记这个函数四舍五入 (2认同)

小智 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值范围内.


Don*_*nia 6

您可以使用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除以它会给你不同的小时.

  • 准确性的最佳答案 - "TIMEDIFF"和"TIMESTAMPDIFF"不考虑夏令时的变化. (2认同)
  • 正如之前评论中所说,这说明了 DST,这太棒了! (2认同)

mom*_*omo 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 
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.我认为第一个是最有效的.谢谢 !!

  • 您应该选择其中一个答案,而不是像这样创建答案.此外,在适当的答案中使用评论,而不是重写或重新引用. (3认同)

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)

  • 我认为这部分不正确?分钟和秒函数不会以分钟或秒的形式返回时间。它们返回值的分钟或秒部分。例如,“second”函数总是返回 0 到 59 之间的值。“Hour”似乎表现不同 http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions。 html#function_second (2认同)