Ici, j'ai une table avec une colonne time
(le type de données est integer
), maintenant je dois convertir la valeur entière au format d'heure HH:MM:SS:00
dans SQL Server 2008.
Également besoin d’une clarification dans le format time
ci-dessus, si 00 représente-t-il des 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.
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 vous pourrez ensuite utiliser la fonction STUFF pour insérer vos deux points dans une chaîne temporelle. Une fois que vous avez fait cela, vous pouvez convertir la chaîne en un type de données time.
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 en un temps sans rien faire de fou.
Dans votre exemple, vous avez également eu un int où les zéros de tête ne sont pas là. Dans ce cas, vous pouvez 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 à l'heure
Utilisez le fichier MSDB.DBO.AGENT_DATETIME intégré (20150119,0)
https://blog.sqlauthority.com/2015/03/13/sql-server-interesting-function-agent_datetime/