如何在SQL中将BigInt转换为DateTime时克服奇怪的错误

som*_*ool 0 sql casting sql-server-2005

我有我认为将是一个简单的演员/转换,但我得到一个奇怪的错误.

这是我的sql:

select CONVERT(datetime,1322510754374,104)
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

 Arithmetic overflow error converting expression to data type datetime.
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

select cast(1322510754374 as datetime)
Run Code Online (Sandbox Code Playgroud)

但我得到同样的错误

我想弄明白.还有另一种方法可以将bigint转换为日期时间吗?

我期待今天的日期:2011-11-29 17:26:52.257,但我所展示的int是较早的一天.

因为我需要将它与它进行比较

 getDate()
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mat*_*lie 7

好吧,我最好的猜测,这是一个合理的,是从1970年1月1日起的毫秒.

你不能使用DATEADD等大的数字.所以这里有两个选项......

DECLARE @stupid BIGINT
SELECT  @stupid = 1322510754374

SELECT CAST(@stupid / 86400000.0 + 25567 AS DATETIME)

SELECT DATEADD(MILLISECOND, @stupid % 86400000, DATEADD(DAY, @stupid / 86400000, '1970-01-01'))

-- Both Give...  2011-11-28 20:05:54.373
Run Code Online (Sandbox Code Playgroud)

您需要使用您知道的日期以某种方式仔细检查.但是我觉得很可能......


告诉你的教授,我很高兴不和那些如此血腥无助的人一起工作.

祝你好运 :)