我有一个非常简单的TSQL脚本,
试图
将一个以毫秒为单位的时间戳转换为
DATETIME
数据类型。这也包括当地的时间偏移。
DECLARE @Time AS BIGINT
SET @Time = 1413381394000
SELECT DATEADD(MILLISECOND,
@Time - DATEDIFF(MILLISECOND, GETDATE(), GETUTCDATE()), CAST('1970-01-01 00:00:00' AS DATETIME)) AS [Datetime]
它一直给我的错误是。
Arithmetic overflow error converting expression to data type int.
现在,我在这个查询中没有任何明确的 int 变量,而且我所做的任何CAST() 到BIGINT 或DECIMAL(13,0) ,都导致了同样的错误。
在这个查询中,哪个部分是错误的?int 是DATEDIFF() 的默认返回数据类型吗?
我知道我可以用@Time 除以1000,然后用SECONDS 而不是MILLISECONDS ,我只想知道是否有办法直接用毫秒来工作,因为我的想法是把这个脚本作为一个内联表值函数来使用(在这个查询之外不能用标量函数)。