如何在SQL Server中将13位数字(如1314637182953)转换为datetime
?转换和转换都直接产生算术溢出错误!
与下面的查询结果相同:
select Convert(datetime, cast(START_DATE as varchar(8)), 112), *
from table
答案 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))