2010-05-31 35 views
2

我已經創建了一個函數,用於將分鐘(smallint)轉換爲時間(varchar(5)),如58 - > 00:58。分鐘到SQL Server的時間

set QUOTED_IDENTIFIER ON 

GO 
Create FUNCTION [dbo].[IntToMinutes] 
(
    @m smallint 
) 
RETURNS nvarchar(5) 
AS 
BEGIN 
    DECLARE @c nvarchar(5) 
    SET @c = CAST((@m/60) as varchar(2)) + ':' + CAST((@m % 60) as varchar(2)) 
    RETURN @c 
END 

問題是當時間少於10分鐘時,像9這樣的函數的結果是0:9。我希望格式是00:09。

我該怎麼做?

回答

7
Create FUNCTION [dbo].[IntToMinutes] 
(
    @m smallint 
) 
RETURNS nvarchar(5) 
AS 
BEGIN 
    DECLARE @c datetime 
    select @c = dateadd(mi,@m,'00:00')  
    RETURN convert(nvarchar(5), @c, 108) 
END 
+0

這不會一天的工作價值更大然後分鐘。(即使你將其轉換爲「廉政」) – 2013-10-15 08:17:10

0

墊兩個(子)字符串用前導零,然後採取最右邊的兩個字符返回:

CREATE FUNCTION [dbo].[IntToMinutes] 
( 
    @m smallint 
) 
RETURNS nvarchar(5) 
AS 
BEGIN 
    DECLARE @c nvarchar(5) 

    SET @c = RIGHT('0' + CAST((@m/60) as varchar(2)), 2) 
    + ':' 
    + RIGHT('0' + CAST((@m % 60) as varchar(2)), 2) 

    RETURN @c 
END 

注意,當然,這並不工作,以及一旦你過去5999分鐘。如果這是一個問題,只需要讓事情變得更大/更長。

1
declare @m smallint 
declare @d varchar(10) 

set @m = 9 

DECLARE @c nvarchar(5) 
SET @c = CAST((@m/60) as varchar(2)) + ':' + CAST((@m % 60) as varchar(2)) 
set @d = Convert(varchar,cast(@c as datetime), 108) 
set @c = LEFT(@d,5) 
select @c 

這隻適用於0到1439之間的數字,但它在24小時內沒問題。 您可以跳過變量聲明@d並以內聯方式執行。

0
CREATE FUNCTION [dbo].[IntToMinutes] 
(
    @m int 
) 
RETURNS nvarchar(20) 
AS 
BEGIN 

    DECLARE @c datetime 
    DECLARE @c1 datetime 
    SELECT @c =dateadd(mi,0,'00:00')    
    select @c1 = dateadd(mi,@m,'00:00')   

    return CONVERT(varchar(10),DATEDIFF(hh, @c, @c1)) + ':' + 
    CONVERT(varchar(10),DATEDIFF(mi,DATEADD(hh,DATEDIFF(hh, @c, @c1),@c),@c1)) 
    end