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
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.
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)
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
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));