web-dev-qa-db-fra.com

Convertir de Bigint en valeur datetime

aidez-moi s'il vous plaît avec celui-ci, Je veux convertir une valeur de Bigint en date-heure. Par exemple, im readingHISTORYtable de teamcity server , sur le champ build_start_time_server i possède cette valeur sur un enregistrement 1283174502729.

Comment puis-je convertir en valeur date/heure ???

Merci

13
Chris

Est-ce que ça marche pour toi? Il renvoie 30-8-2010 13:21:42 pour le moment sur SQL Server 2005:

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

J'ai divisé par 1000 parce que la fonction dateadd ne fonctionnera pas avec un nombre aussi grand. Vous perdez donc un peu de précision, mais son utilisation est beaucoup plus simple.

26
Rob
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)
3
stinkyjak

Approche légèrement différente:

Votre scénario:

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

Code générique:

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

Sortie:

August, 30 2010 00:00:14

Fiddle SQL: http://sqlfiddle.com/#!3/c9eb5a/2/0

3
Matt

Les éléments suivants prennent en compte la nouvelle terminologie SQL et renverront les millisecondes (peuvent également être modifiés pour être utilisés dans un champ calculé). [SQL Server 2012 ou version ultérieure]

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));
0
Arthur Teter