Minutes à l'heure dans SQL Server

J'ai créé une fonction pour convertir les minutes ( smallint ) à l'heure ( varchar(5) ), comme 58 -> 00:58.

 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 less 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 ça?

 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 
 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 entre 0 et 1439, mais ça va pour 24 heures. Vous pouvez ignorer la déclaration de variable @d et le faire en ligne.

Garnissez les deux (sous) strings avec des zéros en tête, puis prenez les deux caractères les plus à droite returnné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 

Notez, bien sûr, que cela ne fonctionne pas très 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.

 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