SQL Server - 将13位数字转换为datetime

时间:2011-12-16 19:30:19

标签: sql-server-2008

如何在SQL Server中将13位数字(如1314637182953)转换为datetime?转换和转换都直接产生算术溢出错误!

与下面的查询结果相同:

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

3 个答案:

答案 0 :(得分:6)

假设它是UNIX time毫秒,请尝试:

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

对于帖子中的数字,SQL-2008会返回2011-08-29 16:59:42.000

答案 1 :(得分:1)

我们已经远远超过了纪元(1970年1月1日),您可能会因上述代码而出现溢出错误。
它可以通过将相关字段作为BIGINT数据类型转换为容易修复,然后除以1000,如下所示:

DATEADD(SECOND, CAST(START_DATE as BIGINT)/1000 ,'1970/1/1')

答案 2 :(得分:0)

如果您不想砍掉毫秒:

CAST(DATEADD(ms, CAST(RIGHT(START_DATE,3) AS smallint), DATEADD(s, START_DATE / 1000, '1970-01-01')) AS datetime2(3))