【问题标题】:MySQL function to format time in SQL query as mm:ssMySQL 函数将 SQL 查询中的时间格式化为 mm:ss
【发布时间】:2012-09-27 11:56:20
【问题描述】:

MySQL NOOB 遇到问题...

我的数据库中有一个名为 TotalTime 的列,它存储经过的时间 (hh:mm:ss)。在表中它存储为 type = time。

当它显示时,它会显示 hh:mm:ss。因此,3:55 显示为 00:03:55。

在我的 SQL 查询中,有没有办法格式化显示 03:55(或者更好的是 3:55)?

查询的开头如下:

SELECT
    OverallRank,
    First,
    Last,
    TotalTime,
    AgeGroup...

非常感谢。

【问题讨论】:

    标签: mysql datetime time


    【解决方案1】:

    使用

    i for minutes
    s for seconds 
    

    点赞--i:s

    %i  Minutes, numeric (00..59)
    %s  Seconds (00..59)
    

    编辑

    SELECT OverallRank, First, Last, DATE_FORMAT(TotalTime, "%i:%s") as TotalTime,...
    FROM tbl_name
    

    【讨论】:

    • 发布 OP 如何在他们的查询中实现这一点将非常有帮助。 :)
    • @bluefeet 我想在我的编辑中做同样的事情,但发现大多数人在我发布这个编辑过的代码之前已经发布了代码:)
    • 可以理解,但你是第一个发帖的,所以扩展你的答案会很好。
    • @bluefeet done 先生,感谢您让我遵守标准 :)
    • @bluefeet 我以为他在寻找分钟和秒,但他接受了小时和分钟的答案..我的坏:)
    【解决方案2】:

    您可以预先使用 DATE_FORMAT() 吗? http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

    SELECT OverallRank, First, Last, DATE_FORMAT(TotalTime, "%i:%s") as TotalTime, AgeGroup..
    

    【讨论】:

    • 非常感谢。但是......我如何让列头保持 TotalTime 并且不显示为 DATE_FORMAT(TotalTime, "%H:%i")
    【解决方案3】:

    检查date_format 函数。

    你可以这样做:

    SELECT
        OverallRank,
        First,
        Last,
        DATE_FORMAT(TotalTime, '%i:%s'),
        AgeGroup...
    

    【讨论】:

      【解决方案4】:

      如果您想获得3:55 输出而不是03:55,您也可以使用IF 构造:

      SELECT OverallRank, 
             First, 
             Last, 
             IF (LEFT(DATE_FORMAT(TotalTime, "%i:%s"),1) == '0',     #IF
                      SUBSTRING(DATE_FORMAT(TotalTime, "%i:%s"),2) , #yes part
                      DATE_FORMAT(TotalTime, "%i:%s")) as TotalTime, #no part
             AgeGroup..
      

      【讨论】:

        猜你喜欢
        • 2013-11-11
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        • 2015-07-23
        • 2021-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多