La situation est que vous avez une valeur en secondes (XXX.XX), et vous voulez convertir en HH: MM: SS en utilisant T-SQL.Comment convertir des secondes en HH: MM: SS en utilisant T-SQL
Exemple:
- 121,25 s devient 00: 02: 01,25
La situation est que vous avez une valeur en secondes (XXX.XX), et vous voulez convertir en HH: MM: SS en utilisant T-SQL.Comment convertir des secondes en HH: MM: SS en utilisant T-SQL
Exemple:
Vous voulez multiplier en millisecondes lorsque la partie fractionnaire est rejetée.
SELECT DATEADD(ms, 121.25 * 1000, 0)
Si vous voulez sans la partie de date, vous pouvez utiliser convert, avec un style 114
SELECT CONVERT(varchar, DATEADD(ms, 121.25 * 1000, 0), 114)
SELECT CONVERT (varchar, DATEADD (ms, 121,25 * 1000, 0), 114) est-ce. –
Très élégant. Agréable. –
Cela ne fonctionnera pas si vous avez plus de 24 heures de secondes – JamWheel
En utilisant SQL Server 05 je peux obtenir ce travail en utilisant:
declare @OrigValue int;
set @OrigValue = 121.25;
select replace(str(@OrigValue/3600,len(ltrim(@OrigValue/3600))+abs(sign(@OrigValue/359999)-1)) + ':' + str((@OrigValue/60)%60,2) + ':' + str(@OrigValue%60,2),' ','0')
cela n'a pas fonctionné pour moi.Si vous passez 896434 secondes - vous voulez 10: 09: 00: 34: 000 et non 249: 00: 34 –
Si le montant de votre temps dépasse 24 heures il ne sera pas traitée correctement avec le DATEADD et Méthodes CONVERT.
SELECT CONVERT(varchar, DATEADD(ms, 24*60*60 * 1000, 0), 114)
00:00:00:000
La fonction suivante prendra en charge les durées supérieures à 24 heures (~ max 35,791,394 heures).
create function [dbo].[ConvertTimeToHHMMSS]
(
@time decimal(28,3),
@unit varchar(20)
)
returns varchar(20)
as
begin
declare @seconds decimal(18,3), @minutes int, @hours int;
if(@unit = 'hour' or @unit = 'hh')
set @seconds = @time * 60 * 60;
else if(@unit = 'minute' or @unit = 'mi' or @unit = 'n')
set @seconds = @time * 60;
else if(@unit = 'second' or @unit = 'ss' or @unit = 's')
set @seconds = @time;
else set @seconds = 0; -- unknown time units
set @hours = convert(int, @seconds /60/60);
set @minutes = convert(int, (@seconds/60) - (@hours * 60));
set @seconds = @seconds % 60;
return
convert(varchar(9), convert(int, @hours)) + ':' +
right('00' + convert(varchar(2), convert(int, @minutes)), 2) + ':' +
right('00' + convert(varchar(6), @seconds), 6)
end
Utilisation:
select dbo.ConvertTimeToHHMMSS(123, 's')
select dbo.ConvertTimeToHHMMSS(96.999, 'mi')
select dbo.ConvertTimeToHHMMSS(35791394.999, 'hh')
0:02:03.000
1:36:59.940
35791394:59:56.400
Pourquoi le temps plus long que 24 heures ne sera pas formaté correctement avec DateAdd? – gotqn
@gotqn: DateAdd() n'est pas le problème. Convert() est le problème. Convert() revient effectivement à zéro toutes les 24 heures. Si vous utilisez Convert() pour formater un intervalle de 27 heures, il renverra "03:00:00". –
Comment gérer ce formatage si le cas d'utilisation dit que les résultats peuvent être négatifs hh: mm: ss (par exemple -340: 23: 34, 03: -4: 05,13: 54: -8 etc.) – Aarush
secondes Convertir les heures requête de sélection:
SELECT field_in_seconds,round((field_in_seconds/3600),2) FROM a_table;
Cela vous donnera le résultat au format décimal. Je ne sais pas comment convertir 1.50 à 1:30. S'il vous plaît, n'hésitez pas à modifier mon code!
SELECT substring(convert (varchar(23),Dateadd(s,10000,LEFT(getdate(),11)),121),12,8)
10000 est votre valeur en sec
DECLARE @seconds AS int = 896434;
SELECT
CONVERT(varchar, (@seconds/86400)) --Days
+ ':' +
CONVERT(varchar, DATEADD(ss, @seconds, 0), 108); --Hours, Minutes, Seconds
Sorties:
10:09:00:34
Cela devrait être le réponse acceptée - elle traite des secondes, comme l'OP l'a demandé, évite d'utiliser une «fonction scalaire» inefficace et traite les intervalles de plusieurs jours de manière appropriée. Le seul point mineur que j'ajouterais est que, dans SQL Land, vos intervalles de temps/temps écoulés pour la partie "days" utilisent généralement "days.hh: mm: ss", c'est-à-dire un point au lieu de "deux points" '. Donc par exemple '2.01: 03: 04' pour 2 jours, 1 heure, 3 minutes, 4 secondes. À votre santé! – NateJ
Pour les questions ayant à l'utilisation DATEADD et CONVERT pendant quelques secondes de plus de 24 heures, nous pouvons utiliser le module pour obtenir autour de cela:
SELECT CONVERT(varchar, @seconds/86400) + ':' + -- Days
CONVERT(varchar, DATEADD(ms, (@seconds % 86400) * 1000, 0), 114)
as "Converted to D:HH:MM:SS.MS"
DECLARE @TimeinSecond INT
SET @TimeinSecond = 340 -- Change the seconds
SELECT RIGHT('0' + CAST(@TimeinSecond/3600 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST((@TimeinSecond/60) % 60 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST(@TimeinSecond % 60 AS VARCHAR),2)
C'est ce que je l'utilise (généralement pour les rapports de courrier électronique de table html)
declare @time int, @hms varchar(20)
set @time = 12345
set @hms = cast(cast((@Time)/3600 as int) as varchar(3))
+':'+ right('0'+ cast(cast(((@Time)%3600)/60 as int) as varchar(2)),2)
+':'+ right('0'+ cast(((@Time)%3600)%60 as varchar(2)),2) +' (hh:mm:ss)'
select @hms
En utilisant SQL Server 2008
declare @Seconds as int = 3600;
SELECT CONVERT(time(0), DATEADD(SECOND, @Seconds, 0)) as 'hh:mm:ss'
laissez-moi savoir la raison pour downvoting. – Vijayaraghavan
https: //www.sqlservercentral. com/Forums/FindPost1267364.aspx – Kennah