如何在sql server中显示标准的时序格式结果

时间:2014-03-31 12:06:49

标签: sql sql-server stored-procedures

我有这样的功能:

ALTER FUNCTION [dbo].[podiumsummerytime] (@dec NUMERIC(18, 2)) RETURNS Varchar(50) 
AS
BEGIN
 DECLARE
 @hour decimal(18,2),
      @Mns decimal(18,2)


 DECLARE @Average  Varchar(50) 
select @hour=CONVERT(int,@dec/60/60)
 SELECT @Mns = convert(int, (@dec / 60) - (@hour * 60 ));

 SELECT @Average = (case when @hour = 0 then ''
                     when @hour < 10 then '0' + cast(@hour as varchar(255)) + 'hr:'
                     else cast(@hour as varchar(255)) + 'hr:'
                end) +
               (case when @mns < 10 then '0' + cast(@mns as varchar(255)) + 'Mn:'
                     else cast(@mns as varchar(255))+ 'Mn'
                end)
RETURN @Average 
END

我有这样的查询:

select  dbo.podiumsummerytime(
                convert(decimal(10,1),
                    avg(convert(numeric(18,2), datediff(ss, t.dtime, t.PAICdate  ))))

            ) as Avgparkingtime,

我的结果是这样的:

Avgparkingtime
02.00hr:20.00min

如果我们现在有1小时显示1,而不是这个我必须显示01.如果有5分钟显示5,而不是我必须显示05 所以我的期望是这样的:

Avgparkingtime
01hr:20Mn

任何帮助都非常明显

1 个答案:

答案 0 :(得分:1)

好像你想要填零号码。由于范围,使用case

可能最容易做到这一点
 SELECT @Average = (case when @hour = 0 then ''
                         when @hour < 10 then '0' + cast(@hour as varchar(255)) + 'hr:'
                         else cast(@hour as varchar(255)) + 'hr:'
                    end) +
                   (case when @min < 10 then '0' + cast(@mns as varchar(255)) + 'Mn:'
                         else cast(@mns as varchar(255) + 'Mn'
                    end) /* +
                   (case when @second < 10 then '0' + cast(@second as varchar(255))
                         else cast(@second as varchar(255))
                    end) */;

但是,我认为您应该使用“HH:MM:SS”格式。这是一种标准格式,易于理解,可以使用convert()生成。