从Bigint转换为datetime值

时间:2010-09-06 09:21:20

标签: sql sql-server tsql teamcity

请帮我这个, 我想将Bigint中的值转换为datetime。 例如,我在 build_start_time_server build_start_time_server em> 我在一条记录1283174502729上有这个值。

如何转换为datetime值???

由于

6 个答案:

答案 0 :(得分:26)

这对你有用吗?它在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函数不适用于那么大的数字。所以你确实失去了一点精度,但使用起来要简单得多。

答案 1 :(得分:3)

略有不同的方法:

你的情景:

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小提琴:http://sqlfiddle.com/#!3/c9eb5a/2/0

答案 2 :(得分:3)

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 :(得分:0)

DATEADD(second,YourValue, CAST('1970-01-01 00:00:00' AS datetime))

答案 4 :(得分:0)

以下内容考虑了新的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));

答案 5 :(得分:-1)

你试过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

适合我。