2014-03-31 34 views
0

我有這樣的功能:如何顯示在SQL Server標準時序格式結果

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

好像你要零個填充數字。因爲範圍的,這可能是最容易與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()生成。

+0

它顯示一些錯誤.. – user3106114

+0

編輯我的功能後,像這樣:我嘗試運行我的存儲過程..但得到空值 – user3106114

+0

@ user3106114。 。 。可能是因爲你從未將「@ second」設置爲任何值,即使它被註釋掉了,我也會將其包含在內。 –

相關問題