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