我想把一个bigint类型的值转换成datetime类型。
例如,我正在读取TeamCity服务器的HISTORY表。在字段build_start_time_server中,我有一条记录上的值为1283174502729。
我该如何将它转换为datetime值呢?
我想把一个bigint类型的值转换成datetime类型。
例如,我正在读取TeamCity服务器的HISTORY表。在字段build_start_time_server中,我有一条记录上的值为1283174502729。
我该如何将它转换为datetime值呢?
这个方法对你有用吗?目前在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函数无法处理如此大的数字。因此,您会失去一些精度,但使用起来更简单。
稍微有些不同的方法:
您的情景:
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
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)
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));
将bigint转换为datetime/unixtime时,必须在转换为时间戳之前将这些值除以1000000(10e6)。
SELECT
CAST( bigIntTime_column / 1000000 AS timestamp) example_date
FROM example_table
简单易用的解决方案,不需要导入任何额外的库或函数
SELECT dateadd(ms, ((CONVERT(bigint, build_start_time_server)%1000)),
dateadd(ss, ((CONVERT(bigint, build_start_time_server)/1000)%60),
dateadd(mi, ((CONVERT(bigint, build_start_time_server)/1000)/60), '1970-01-01'))) FROM yourtable
我得到的答案是:
Monday, August 30, 2010 1:21 PM
选择 Cast(Cast(19980324 as nvarchar) as Datetime)
DATEADD(second,YourValue, CAST('1970-01-01 00:00:00' AS datetime))
你试过使用 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
对我来说可行。