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

时间:2011-11-29 22:23:28

标签: sql sql-server-2005 casting

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

这是我的sql:

select CONVERT(datetime,1322510754374,104)

但是我收到了这个错误:

 Arithmetic overflow error converting expression to data type datetime.

我也尝试过:

select cast(1322510754374 as datetime)

但是我得到了同样的错误

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

我期待今天的日期:2011-11-29 17:26:52.257,但我所展示的是早些时候的。

因为我需要将它与

进行比较
 getDate()

感谢。

2 个答案:

答案 0 :(得分: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

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


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

祝你好运:)

答案 1 :(得分:0)

您收到此消息是因为语句中的数字要大到很大才能转换为日期...最大数字是2958463,相当于9999-12-31

要将时间添加到它,只需在数字中添加小数位,例如:2958463.123

如果您正在对bigint号码进行硬编码,请先尝试反向操作,这将为您提供bigint。

这是我对你约会的最近陈述:

select CONVERT(datetime, 40874.726, 104)