我有这样的功能:
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
任何帮助都非常明显
答案 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()
生成。