2016-05-13 35 views
1

我错过了一些东西,但我不知道它是什么。Datediff在68岁以下时溢出

如果我运行下面的查询:

select 
    max(DATEDIFF(SECOND, EventStartTimeStamp_UTC0, EventEndTimeStamp_UTC0)) as EventDuration 
from allEvent 

,我发现了以下错误:

The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.

我知道,当2个日期时间更使用DATEDIFF与秒可以给这个错误超过68年。这不应该是我的情况,因为在表中的最早的数据是2013年一月

我跑下面的查询,以确保没有空的DateTime

select count(*) 
from allEvent 
where EventStartTimeStamp_UTC0 is null or EventStartTimeStamp_UTC0 is null 

没有记录具有零日期时间

如果我添加以下where子句来查询它的工作原理

select DATEDIFF(second, EventStartTimeStamp_UTC0, EventEndTimeStamp_UTC0) as EventDuration 
from allEvent 
where DATEDIFF(Minute, EventStartTimeStamp_UTC0, EventEndTimeStamp_UTC0) >= 1 

这不起作用:

select DATEDIFF(second, EventStartTimeStamp_UTC0, EventEndTimeStamp_UTC0) as EventDuration 
from allEvent 
where DATEDIFF(Minute, EventStartTimeStamp_UTC0, EventEndTimeStamp_UTC0) < 1 

感谢您的帮助

+2

是否有开始日期在结束日期之后的任何实例? –

+3

在几分钟内完成并检查最大和最小值? –

+0

还是日期相同? –

回答

3

所以最早的是2013年1月?

select max(EventStartTimeStamp_UTC0), min(EventStartTimeStamp_UTC0) 
    , max(EventEndTimeStamp_UTC0) , min(EventEndTimeStamp_UTC0) 
from table 
+1

事实证明,我在2016年有一些EventEndTimeStamp_UTC0,它们是'1900-01-01 01:00:15.000',带有EventStartTimeStamp_UTC0。所以这就是我出错的原因。我从来没有想过这种情况。您的输入帮助我找到它。非常感谢你。 – tolrahC

0

尝试使用

select DATEDIFF(second, EventStartTimeStamp_UTC0, EventEndTimeStamp_UTC0) as EventDuration 
from allEvent 
where ABS(DATEDIFF(Minute, EventStartTimeStamp_UTC0, EventEndTimeStamp_UTC0)) < 1 
+0

为什么你建议在两个数值相距不到一分钟的记录上进行筛选? –