将秒转换为人类可读的持续时间

Hen*_*nno 21 mysql time duration

我怎样才能最好地将90060(秒)转换成一串"25h 1m"?

目前我在SQL中这样做:

SELECT 
  IF(
    HOUR(
      sec_to_time(
        sum(time_to_sec(task_records.time_spent))
      )
    ) > 0, 
    CONCAT(
      HOUR(sec_to_time(sum(time_to_sec(task_records.time_spent)))), 
      'h ', 
      MINUTE(sec_to_time(sum(time_to_sec(task_records.time_spent)))),
      'm'
    ), 
    CONCAT(
      MINUTE(sec_to_time(sum(time_to_sec(task_records.time_spent)))),
      'm'
    )
  ) as time
FROM myTable;
Run Code Online (Sandbox Code Playgroud)

但我不确定这是最方便的方法:-)

我对在SQL(不同于我已经在做)或PHP中这样做的建议持开放态度.

编辑:

所需字符串的示例:"5m","40m","1h 35m","45h""46h 12m".

Pet*_*ter 50

TIME_FORMAT(SEC_TO_TIME(task_records.time_spent),'%Hh %im')
Run Code Online (Sandbox Code Playgroud)

文档是你的朋友:


根据评论:

DROP FUNCTION IF EXISTS GET_HOUR_MINUTES;
CREATE FUNCTION GET_HOUR_MINUTES(seconds INT)
  RETURNS VARCHAR(16)

  BEGIN
  DECLARE result VARCHAR(16);
  IF seconds >= 3600 THEN SET result = TIME_FORMAT(SEC_TO_TIME(seconds),'%kh %lm');
  ELSE SET result = TIME_FORMAT(SEC_TO_TIME(seconds),'%lm');
  RETURN result;
  END

DELIMETER ;
Run Code Online (Sandbox Code Playgroud)

用法:

SELECT GET_HOUR_MINUTES(task_records.time_spent) FROM table
Run Code Online (Sandbox Code Playgroud)


rra*_*wat 5

您可以使用预定义函数 sec_to_time()

sec_to_time(秒数)

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_sec-to-time

  • 这增加了哪些已接受的答案所没有的内容? (2认同)