2010-05-31 8 views
2

J'ai créé une fonction pour convertir les minutes (smallint) à l'heure (varchar(5)), comme 58 -> 00:58.Minutes à temps dans 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 

Le problème est quand il y a moins de 10 minutes, comme 9. Le résultat de cette fonction est 0: 9. Je veux que le format soit 00:09.

Comment puis-je faire cela?

Répondre

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

Cela ne fonctionnera pas pour les valeurs plus puis minutes pour un jour .. (même si vous le convertir en « int ») –

0

Pad les deux (sous) chaînes avec zéros à gauche, puis prendre les deux personnages les plus à droite sont retournés:

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 

Note, bien sûr, que cela ne fonctionne pas si bien une fois que vous avez passé 5999 minutes. Si c'est un problème, faites en sorte que les choses soient un peu plus longues/plus longues.

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 

Cela ne fonctionne que pour les nombres compris entre 0 et 1439, mais c'est correct pendant 24 heures. Vous pouvez ignorer la déclaration de variable @d et le faire en ligne.

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 
Questions connexes