2012-09-24 281 views
9

Aquí tengo una tabla con una columna time (tipo de datos es integer), ahora tengo que convertir el valor entero a formato de hora HH:MM:SS:00 en SQL Server 2008.Cómo convertir un número entero (tiempo) a HH: MM: SS :: 00 en SQL Server 2008?

también necesitan aclaración en el formato time anterior, ya sea 00 representa milisegundos?

Por favor ayuda en esto.

ejemplo: 23421155 representa 23: 42: 11: 55; 421151 representa 00: 42: 11: 51

Espero que esté claro ahora.

+4

¿Cuál es el formato numérico? –

+0

No conozco el formato de tiempo que han utilizado, pero he aquí un ejemplo 10455836. – Praveen

+8

Necesita saber lo que significa ese número antes de que alguien pueda decirle cómo convertirlo a un tiempo. –

Respuesta

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

Resultado:

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

(1 row(s) affected) 


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

(1 row(s) affected) 
+0

Información adicional según el tipo de datos 'time' puede ser útil aquí: http://technet.microsoft.com/en-us/library/bb677243.aspx – Sandr

+0

Son 4 años y medio después, pero esto debe aceptarse como la respuesta . Es exactamente lo que necesitaba –

1

Puede usar la siguiente conversión de tiempo dentro de SQL como esto:

--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, '') 

Resultado: - tiempo en minutos y 1900-01- 01 14: 47: 00,000 < - Minutos a tiempo

6

Convierta el entero en una cadena y luego puede usar la función STUFF para insertar en sus dos puntos en la cadena de tiempo. Una vez que haya hecho eso, puede convertir la cadena en un tipo de datos de tiempo.

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

Esa debería ser la forma más sencilla de convertirlo en un tiempo sin hacer nada para volverse loco.

En su ejemplo, también tenía un int donde los ceros a la izquierda no estaban allí. En ese caso, puede hacer algo como esto:

SELECT CAST(STUFF(STUFF(STUFF(RIGHT('00000000' + CAST(421151 AS VARCHAR),8),3,0,':'),6,0,':'),9,0,'.') AS TIME) 
Cuestiones relacionadas