2010-09-06 31 views
9

por favor ayúdenme con este, quiero convertir un valor de Bigint a datetime. Por ejemplo im lectura HISTORIA mesa de servidor TeamCity, en el campo build_start_time_server tengo este valor en un registro 1283174502729.Convertir de Bigint al valor de fecha y hora

¿Cómo puedo convertir el valor de fecha y hora ???

Gracias

+0

Cambié las etiquetas para hacerlas más específicas. Tenga en cuenta que si utiliza "servidor sql" en el campo de la etiqueta, esto irá debajo de la etiqueta * sql * así como de la etiqueta * server * pero no debajo de la etiqueta * sql-server * que probablemente sea la que desea. – krock

+1

¿Qué valor de fecha y hora quieres para 1283174502729? – gbn

Respuesta

22

¿Esto funciona para usted? Devuelve 30-8-2010 13:21:42 en el momento en SQL Server 2005:

select dateadd(s, convert(bigint, 1283174502729)/1000, convert(datetime, '1-1-1970 00:00:00')) 

He dividido en 1000 debido a la función dateadd no funcionará con un número tan grande. Entonces pierdes un poco de precisión, pero es mucho más simple de usar.

+1

Krock, eso es perfecto. Gracias por tu ayuda. – Chris

+0

@ Chris si esto es correcto, debes aceptar la respuesta. –

2

enfoque ligeramente diferente:

Su escenario:

SELECT dateadd(ms, 1283174502729/86400000, (1283174502729/86400000) + 25567) 
FROM yourtable 

código genérico:

SELECT dateadd(ms, yourfield/86400000, (yourfield/86400000) + 25567) 
FROM yourtable 

Salida:

August, 30 2010 00:00:14 

SQL violín: http://sqlfiddle.com/#!3/c9eb5a/2/0

2
CAST(SWITCHOFFSET(CAST(dateadd(s, convert(bigint, [t_stamp])/1000, convert(datetime, '1-1-1970 00:00:00')) AS DATETIMEOFFSET), DATENAME (TZoffset, SYSDATETIMEOFFSET())) AS DATETIME) 
+0

Aún no entiendo la votación. ¿Hay errores? Esto funciona para 2008R2. ¿Es ineficiente? ¿Cómo puedo mejorar si no sé qué mejorar? – stinkyjak

+0

Me imagino que el downvote fue para proporcionar una respuesta de solo código sin ninguna explicación sobre lo que está haciendo o por qué funciona. – iamdave

0

DATEADD (segundo, YourValue, CAST ('1970-01-01 00:00:00' AS de fecha y hora))

+0

Downvoted. "Error de desbordamiento aritmético que convierte la expresión a tipo de datos int". con los datos proporcionados en la pregunta. – UnhandledExcepSean

+0

Sin embargo, con un poco de ajustes podría funcionar, ¿quizás el póster puede resolverlo un poco?(upvoted para animarlo un poco :)) – Gar

0

La siguiente toma nueva terminología SQL en cuenta y devolverá los milisegundos (puede también ser modificado para su uso en un campo calculado.) [SQL Server 2012 o posterior]

declare @StartDate datetime2(3) = '1970-01-01 00:00:00.000' 
, @milliseconds bigint = 1283174502729 
, @MillisecondsPerDay int = 60 * 60 * 24 * 1000 -- = 86400000 

SELECT DATEADD(MILLISECOND, TRY_CAST(@milliseconds % @millisecondsPerDay AS 
INT), DATEADD(DAY, TRY_CAST(@milliseconds/@millisecondsPerDay AS INT), 
@StartDate)); 
Cuestiones relacionadas