web-dev-qa-db-fra.com

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

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.

12
Praveen
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)
16
Mikael Eriksson

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)
8
all about data

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

1
A Ghazal

Utilisez le fichier MSDB.DBO.AGENT_DATETIME intégré (20150119,0)

https://blog.sqlauthority.com/2015/03/13/sql-server-interesting-function-agent_datetime/

0
Bruce Morris II