SQL Server - преобразование 13-значного числа в дату и время - PullRequest
3 голосов
/ 16 декабря 2011

Как я могу преобразовать 13-значное число, например 1314637182953, в datetime в SQL Server?Как приведение, так и преобразование напрямую дают ошибку арифметического переполнения!

Тот же результат, что и при запросе ниже:

select Convert(datetime, cast(START_DATE as varchar(8)), 112), * 
from table

Ответы [ 3 ]

6 голосов
/ 16 декабря 2011

Предполагая, что время UNIX в миллисекундах, попробуйте это:

DATEADD(SECOND, START_DATE/1000 ,'1970/1/1')

Для числа из вашего поста SQL-2008 возвращает 2011-08-29 16:59:42.000

1 голос
/ 09 июня 2016

Мы достаточно далеки от эпохи (01.01.1970), чтобы вы могли получить ошибку переполнения с помощью приведенного выше кода.
Это можно легко исправить, приведя рассматриваемое поле к типу данных BIGINT перед делением на 1000, как показано ниже:

DATEADD(SECOND, CAST(START_DATE as BIGINT)/1000 ,'1970/1/1')
0 голосов
/ 17 января 2019

Если вы не хотите отсекать миллисекунды:

CAST(DATEADD(ms, CAST(RIGHT(START_DATE,3) AS smallint), DATEADD(s, START_DATE / 1000, '1970-01-01')) AS datetime2(3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...