Comment convertir un entier (temps) en HH:MM:SS::00 dans SQL Server 2008?

Ici j'ai une table avec un time colonne (le type de données est integer), maintenant je dois convertir la valeur entière en format de temps HH:MM:SS:00 in SQL Server 2008.

il faut aussi clarifier ce qui précède time format, si 00 représente millisecondes?

s'il vous Plaît aider sur ce point.

exemple: 23421155 représente 23: 42:11: 55; 421151 représente 00:42:11: 51

j'Espère que c'est clair maintenant.

11
demandé sur Praveen 2012-09-24 19:43:28

3 réponses

declare @T int

set @T = 10455836
--set @T = 421151

select (@T / 1000000) % 100 as hour,
       (@T / 10000) % 100 as minute,
       (@T / 100) % 100 as second,
       (@T % 100) * 10 as millisecond

select dateadd(hour, (@T / 1000000) % 100,
       dateadd(minute, (@T / 10000) % 100,
       dateadd(second, (@T / 100) % 100,
       dateadd(millisecond, (@T % 100) * 10, cast('00:00:00' as time(2))))))  

Résultat:

hour        minute      second      millisecond
----------- ----------- ----------- -----------
10          45          58          360

(1 row(s) affected)


----------------
10:45:58.36

(1 row(s) affected)
15
répondu Mikael Eriksson 2012-09-25 05:59:34

convertissez le nombre entier en chaîne et ensuite vous pouvez utiliser la fonction STUFF pour insérer dans vos colons en chaîne de temps. Une fois que vous avez fait que vous pouvez convertir la chaîne en un type de données de temps.

SELECT CAST(STUFF(STUFF(STUFF(cast(23421155 as varchar),3,0,':'),6,0,':'),9,0,'.') AS TIME)

cela devrait être le moyen le plus simple de le convertir à un temps sans rien faire à la folie.

dans votre exemple vous avez aussi un int où les zéros de tête ne sont pas là. Dans ce cas, vous pouvez très simplement faire quelque chose comme ceci:

SELECT CAST(STUFF(STUFF(STUFF(RIGHT('00000000' + CAST(421151 AS VARCHAR),8),3,0,':'),6,0,':'),9,0,'.') AS TIME)
7
répondu all about data 2014-11-05 05:30:43

Vous pouvez utiliser la conversion de temps suivante dans SQL comme ceci:

--Convert Time to Integer (Minutes)
DECLARE @timeNow datetime = '14:47'
SELECT DATEDIFF(mi,CONVERT(datetime,'00:00',108), CONVERT(datetime, RIGHT(CONVERT(varchar, @timeNow, 100),7),108))

--Convert Minutes to Time
DECLARE @intTime int = (SELECT DATEDIFF(mi,CONVERT(datetime,'00:00',108), CONVERT(datetime, RIGHT(CONVERT(varchar, @timeNow, 100),7),108)))
SELECT DATEADD(minute, @intTime, '')

Résultat: 887 < - temps en minutes et 1900-01-01 14:47:00.000 <-- Minutes de temps

1
répondu A Ghazal 2013-11-04 09:06:48