mysql timediff to hours

前端 未结 10 1759
我寻月下人不归
我寻月下人不归 2020-12-13 08:47

I\'m Trying to get the timediff from my table and convert it to hours (it\'s for an hourly billed service)

SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDa

相关标签:
10条回答
  • 2020-12-13 09:14

    NOTE the most voted up answer in this chain is INCORRECT! Using HOUR will only return hours as an integer. Below would correct the most popular answer to return hours as an integer and minutes as a decimal (ie 6.5 hours).

    TIME_TO_SEC(TIMEDIFF(endDate, startDate))/3600 as hours
    
    0 讨论(0)
  • 2020-12-13 09:16

    TIMEDIFF(endDate, startDate) outputs in DateTime format, so flat that to timestamp and devide by (60*60)

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

    Edit: Alternatively,TimestampDiff may also provide a valid solution in more elegant way providing its example:

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

    And your solution can be:

    SELECT TIMESTAMPDIFF(HOUR, startDate, endDate) AS hours_different
    FROM tasks
    
    0 讨论(0)
  • 2020-12-13 09:19
    TIMEDIFF(endDate, startDate) / 10000
    
    0 讨论(0)
  • 2020-12-13 09:20

    You can use UNIX_TIMESTAMP to do the calculation in SELECT query.

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

    UNIX_TIMESTAMP convert datetime to number of second from epoch. You can substract both timestamp to get difference in second. Divide it with 3600 will give you difference in hour.

    0 讨论(0)
  • 2020-12-13 09:20

    eg: 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 
    

    returns 19.4061 which is good

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

    Only returns hours while i also need minutes to be converted.

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

    returns 0. I think the first one is the most efficent. Thanks !!

    0 讨论(0)
  • 2020-12-13 09:27
    TIMESTAMPDIFF(HOUR, startDate, endDate)
    

    is the best way to do it, because it works with big time intervals, like

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

    Result: 333120

    while

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

    Result: 838

    fails.

    As we see in the example above, it surprisingly even works beyond the timestamp limitation in year 2038.

    The maximum hours which are returned by HOUR(TIMEDIFF(dateEnd, dateStart)) is 838, because TIMEDIFF is limited to the range allowed for TIME values.

    0 讨论(0)
提交回复
热议问题