首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在TSQL中将分钟数转换为hh:mm格式?

如何在TSQL中将分钟数转换为hh:mm格式?
EN

Stack Overflow用户
提问于 2013-07-18 20:49:23
回答 13查看 187.6K关注 0票数 43

我有一个select查询,它有一个DURATION列来计算分钟数。我想把这些分钟转换成hh:mm格式。

工期具有类似于60, 120,150的值。

例如,

60变成01:00

120改为02:00

150改为02:30

此外,这也是我如何检索工期 (Minutes)的方法。

代码语言:javascript
运行
复制
DATEDIFF(minute, FirstDate,LastDate) as 'Duration (Minutes)'
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2013-07-18 21:03:08

可以将持续时间转换为日期,然后对其进行格式化:

代码语言:javascript
运行
复制
DECLARE
    @FirstDate datetime,
    @LastDate datetime

SELECT
    @FirstDate = '2000-01-01 09:00:00',
    @LastDate = '2000-01-01 11:30:00'

SELECT CONVERT(varchar(12), 
       DATEADD(minute, DATEDIFF(minute, @FirstDate, @LastDate), 0), 114) 

/* Results: 02:30:00:000 */

为了降低精度,修改varchar的大小:

代码语言:javascript
运行
复制
SELECT CONVERT(varchar(5), 
       DATEADD(minute, DATEDIFF(minute, @FirstDate, @LastDate), 0), 114) 

/* Results: 02:30 */
票数 67
EN

Stack Overflow用户

发布于 2013-11-10 07:58:54

此功能是将持续时间以分钟为单位转换为可读的小时和分钟格式。即2h30m。如果持续时间小于1小时,它将消除小时数;如果持续时间以小时为单位,并且没有额外的分钟,则仅显示小时数。

代码语言:javascript
运行
复制
CREATE FUNCTION [dbo].[MinutesToDuration]
(
    @minutes int 
)
RETURNS nvarchar(30)

AS
BEGIN
declare @hours  nvarchar(20)

SET @hours = 
    CASE WHEN @minutes >= 60 THEN
        (SELECT CAST((@minutes / 60) AS VARCHAR(2)) + 'h' +  
                CASE WHEN (@minutes % 60) > 0 THEN
                    CAST((@minutes % 60) AS VARCHAR(2)) + 'm'
                ELSE
                    ''
                END)
    ELSE 
        CAST((@minutes % 60) AS VARCHAR(2)) + 'm'
    END

return @hours
END

要使用此功能:

代码语言:javascript
运行
复制
SELECT dbo.MinutesToDuration(23)

结果:23m

代码语言:javascript
运行
复制
SELECT dbo.MinutesToDuration(120)

结果:2h

代码语言:javascript
运行
复制
SELECT dbo.MinutesToDuration(147)

结果:2h27m

希望这能有所帮助!

票数 23
EN

Stack Overflow用户

发布于 2013-07-18 21:03:22

我不确定这些是最好的选择,但他们肯定会完成任务:

代码语言:javascript
运行
复制
declare @durations table
(
    Duration int
)

Insert into @durations(Duration)
values(60),(80),(90),(150),(180),(1000)

--Option 1 - Manually concatenate the values together
select right('0' + convert(varchar,Duration / 60),2) + ':' + right('0' + convert(varchar,Duration % 60),2)
from @Durations

--Option 2 - Make use of the time variable available since SQL Server 2008
select left(convert(time,DATEADD(minute,Duration,0)),5)
from @durations

GO
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17733616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档