我有我认为简单的演员/转换,但我得到了一个奇怪的错误。
这是我的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()
感谢。
答案 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)