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.
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)
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)
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