【问题标题】:Convert seconds to days, hours, minutes, seconds (MySQL)将秒转换为天、小时、分钟、秒 (MySQL)
【发布时间】:2017-05-10 21:23:52
【问题描述】:

例子:

秒="1015557";

结果应该是:

11 天 18 小时:05 分:57 秒

如何在 MySQL 中做到这一点?

【问题讨论】:

标签: mysql date-arithmetic date-conversion


【解决方案1】:
select concat(
    format(floor(s / @day),0),
    'days ',
    time_format(sec_to_time(s % @day),'%Hh:%im:%ss') 
  ) formatted_date
from (select 1015557 s) t, (select @day = 3600 * 24);

产生:

+--------------------+                                                                                                                               
| days               |                                                                                                                               
+--------------------+                                                                                                                               
| 11days 18h:05m:57s |                                                                                                                               
+--------------------+

【讨论】:

    【解决方案2】:

    您可以使用这样的查询:

    SELECT
      DATE_FORMAT(date('1970-12-31 23:59:59')
       + interval 1015557 second,'%j days %Hh:%im:%ss') as result;
    

    样本

    mysql>     SELECT
        ->       DATE_FORMAT(date('1970-12-31 23:59:59')
        ->        + interval 1015557 second,'%j days %Hh:%im:%ss') as result;
    +----------------------+
    | result               |
    +----------------------+
    | 011 days 18h:05m:57s |
    +----------------------+
    1 row in set (0,00 sec)
    
    mysql>
    

    【讨论】:

    • 您好@Bernd,非常感谢您提供的解决方案。但我发现这个值有一个错误:81865。我得到:365 天 22h:44m:25s - 我认为这是一个错误。你有想法吗?小提琴在这里:sqlfiddle.com/#!9/9eecb/89478
    【解决方案3】:

    你可以试试这个:

    SET @seconds = 1015557;
    SELECT CONCAT(
                FLOOR(TIME_FORMAT(SEC_TO_TIME(@seconds), '%H') / 24), 'days ',
                MOD(TIME_FORMAT(SEC_TO_TIME(@seconds), '%H'), 24), 'h:',
                TIME_FORMAT(SEC_TO_TIME(@seconds), '%im:%ss')
            )
    AS Result
    

    结果应该是:

    11days 18h:05m:57s
    

    希望这会有所帮助!

    【讨论】:

      【解决方案4】:
      SELECT *
           , CONCAT( FLOOR(sec/3600),"hour ", FLOOR(MOD(sec,3600)/60),"min ",MOD(sec,60),"sec") 
              FROM table_1
      

      【讨论】:

      • 您好,请编辑您的答案以将代码最好放在堆栈片段中。
      • 请花几分钟时间阅读How to Answer 以获得一些有用的回答问题的技巧。特别是。 “更全面的解释更好”部分。此外,你需要一个很好的理由来回答一个老问题,答案很好。在没有任何解释的情况下,这样的答案往往会在审核过程中被删除。
      • 这不包括“天”。
      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多