我有一个select查询,它有一个DURATION列来计算分钟数。我想把这些分钟转换成hh:mm格式。
工期具有类似于60, 120,150的值。
例如,:
60变成01:00
120改为02:00
150改为02:30
此外,这也是我如何检索工期 (Minutes)的方法。
DATEDIFF(minute, FirstDate,LastDate) as 'Duration (Minutes)'发布于 2013-07-18 21:03:08
可以将持续时间转换为日期,然后对其进行格式化:
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的大小:
SELECT CONVERT(varchar(5),
DATEADD(minute, DATEDIFF(minute, @FirstDate, @LastDate), 0), 114)
/* Results: 02:30 */发布于 2013-11-10 07:58:54
此功能是将持续时间以分钟为单位转换为可读的小时和分钟格式。即2h30m。如果持续时间小于1小时,它将消除小时数;如果持续时间以小时为单位,并且没有额外的分钟,则仅显示小时数。
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要使用此功能:
SELECT dbo.MinutesToDuration(23)结果:23m
SELECT dbo.MinutesToDuration(120)结果:2h
SELECT dbo.MinutesToDuration(147)结果:2h27m
希望这能有所帮助!
发布于 2013-07-18 21:03:22
我不确定这些是最好的选择,但他们肯定会完成任务:
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
GOhttps://stackoverflow.com/questions/17733616
复制相似问题