Преобразование эпохи бигинта в SQL Server - PullRequest
0 голосов
/ 21 июня 2019

У меня возникают проблемы при преобразовании метки времени эпохи Unix в обычное время в хранилище данных Azure:

select 
    dateadd(s, convert(bigint, 2551564800), convert(datetime, '1-1-1970 00:00:00')) as bigint

Ошибка:

Ошибка арифметического переполнения при преобразовании выражения в тип данных int.

Значение 2551564800 равно 09/11/2050.

Любая помощь будет оценена

1 Ответ

0 голосов
/ 21 июня 2019

Если у вас нет значений эпох, превышающих 5103129600 (что позволит вам иметь даты до 2106-02-07T06:28:13), это будет работать:

SELECT DATEADD(SECOND,2551564800 % 2147483647, DATEADD(SECOND,2147483647 * (V.Epoch / 2147483647),'19700101'))
FROM (VALUES(CONVERT(bigint,2551564800))) V(Epoch)
...