【问题标题】:Convert minutes in Numeric format to Hours and minutes format将数字格式的分钟转换为小时和分钟格式
【发布时间】:2016-05-06 14:01:00
【问题描述】:

我在名为“Efforts_in_minutes”的列中的分钟数为 1064,我需要格式为 HH:MM(即 17:44)的输出。我已经尝试了以下查询

SELECT Cast(Round(Total_Effort_in_Minutes / 60, 0, 2) AS VARCHAR) 
        + ':' 
        + Cast(Total_Effort_in_Minutes % 60 AS VARCHAR(2))
FROM   PPS 

我得到的输出是 17.000000:44 但我需要的是 17:44

请建议如何实现。

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    不需要使用Round 函数。只做整数除法:

    select CAST(CAST(Total_Effort_in_Minutes AS INT) / 60 AS VARCHAR)
        + ':' + CAST(Total_Effort_in_Minutes  % 60 AS VARCHAR(2) )
    

    如果您的列 Total_Effort_in_Minutes 已经具有整数数据类型,那么您可以简化为:

    select CAST(Total_Effort_in_Minutes / 60 AS VARCHAR)
        + ':' + CAST(Total_Effort_in_Minutes  % 60 AS VARCHAR(2) )
    

    如果您需要将分钟部分用零填充以获得至少 2 位数字,那么:

    select RIGHT('0' + CAST(CAST(Total_Effort_in_Minutes AS INT) / 60 AS VARCHAR), 2)
        + ':' + CAST(Total_Effort_in_Minutes  % 60 AS VARCHAR(2) )
    

    【讨论】:

    • 它总是会被截断,因为它们为第三个参数传递了一个非零值 (Round(999.99, 0, 2) = 999) 但无论如何这更容易。
    • 感谢您强调这一点,@MartinSmith。我相应地更新了关于使用 Round 的声明。
    • 非常感谢 :) 现在我得到了一张清晰的图片 - @trincot
    【解决方案2】:
    SELECT DATEADD(MI,Total_Effort_in_Minutes,TIMEFROMPARTS(0,0,0,0,0))
    FROM   PPS
    

    最佳实践:客户端应根据区域设置决定如何表示时间,以允许诸如 24 小时制与上午/下午之类的变体。

    【讨论】:

      【解决方案3】:

      请看这个链接:https://stackoverflow.com/a/19887500/6298495

      创建内联函数是链接中提供的一个很好的解决方案。

      【讨论】:

        【解决方案4】:

        只是为了好玩:

        SELECT CONVERT(CHAR(5), DATEADD(mi, 1064, 0), 8)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-04
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-27
          • 2020-08-15
          相关资源
          最近更新 更多