我有这样的功能:
ALTER FUNCTION [dbo].[testfunctionstacknew] (@dec NUMERIC(18, 2)) RETURNS Varchar(50)
AS
BEGIN
DECLARE
@hour decimal(18,2),
@Mns decimal(18,2),
@second decimal(18,3)
DECLARE @Average Varchar(50)
select @hour=CONVERT(int,@dec/60/60)
SELECT @Mns = convert(int, (@dec / 60) - (@hour * 60 ));
select @second=@dec % 60;
SELECT @Average =
convert(varchar(9), convert(int, @hour)) + ':' +
-- right('00' + convert(decimal(10,0), convert(decimal(18,2), @hour)), 2) + ':' +
right('00' + convert(decimal(10,0), convert(decimal(18,2), @Mns)), 2) + ':' +
right('00' + CONVERT(decimal(10,0), convert(varchar(10), @second)), 6)
RETURN @Average
END
我有一个像这样的存储过程:
select dbo.testfunctionstacknew(
convert(decimal(10,1),
avg(convert(numeric(18,2), datediff(ss, t.dtime, t.PAICdate ))))
) as Avgparkingtime from (select top 10 * from transaction_tbl where locid=6 and dtime >= getdate()-1 order by transactID desc ) t
执行存储过程时,如果平均时间少于60分钟,我得到的结果如下:
Avgparkingtime :
0:25:33
如果平均时间少于60分钟,那么我不希望在分钟前得到零,(这次只需要显示分钟和秒数)..如果分钟大于60,只需要显示小时分钟......我怎么能这样做?我必须在我的功能中做出什么改变?任何帮助都非常明显..
答案 0 :(得分:0)
尝试更改构建格式化字符串的部分,如下所示:
SELECT @Average =
case
when convert(int, @hour) <> 0 then convert(varchar(9), convert(int, @hour)) + ':'
else ''
end +
right('00' + convert(decimal(10,0), convert(decimal(18,2), @Mns)), 2) + ':' +
right('00' + CONVERT(decimal(10,0), convert(varchar(10), @second)), 6)