[运行 SQL Server 2008 SP3]
我有一个导致smalldatetime
类型溢出的查询。DATEADD()
但是,这应该(理论上)永远不会发生,因为我有查询结构的方式 - 逻辑应该导致在执行导致溢出之前很久就知道真值。
这是 WHERE 子句的相关部分:
TimeIn >= '1/8/1950' AND TimeIn < '1/9/1950' AND
DATEADD(week, DATEDIFF(week, '1/8/1950', '9/14/2014'), TimeIn) >= '9/14/2014'
这很好用 - 除非 TimeIn (a smalldatetime
) >= 10/1/2014,否则它将溢出 smalldatetime 空间。但为什么DATEADD()
还要被处决呢?如果日期是 2014 年 10 月 1 日,它永远不应该被执行......但它是。