Конвертировать из Bigint в значение datetime - PullRequest
14 голосов
/ 06 сентября 2010

пожалуйста, помогите мне с этим, я хочу преобразовать значение из Bigint в datetime. Например, я читаю ИСТОРИЯ таблица сервер teamcity , в поле build_start_time_server у меня есть это значение на одной записи 1283174502729.

Как я могу преобразовать в значение даты и времени ???

Спасибо

Ответы [ 6 ]

28 голосов
/ 06 сентября 2010

Это работает для вас?В SQL Server 2005 возвращается 30-8-2010 13:21:42:

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

Я разделил на 1000, потому что функция dateadd не будет работать с таким большим числом.Таким образом, вы теряете немного точности, но это намного проще в использовании.

3 голосов
/ 31 марта 2016
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 голосов
/ 13 октября 2015

Немного другой подход:

Ваш сценарий:

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

Общий код:

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

Выход:

August, 30 2010 00:00:14

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

0 голосов
/ 25 января 2018

Вы пробовали FROM_UNIXTIME?

select from_unixtime('your_field') from 'your_table'

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_from-unixtime

У меня работает.

0 голосов
/ 20 июля 2017

Следующее учитывает новую терминологию SQL и возвращает миллисекунды (также может быть изменено для использования в вычисляемом поле.) [SQL Server 2012 или более поздняя версия]

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 голосов
/ 12 августа 2016
DATEADD(second,YourValue, CAST('1970-01-01 00:00:00' AS datetime))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...