“向'datetime'列添加值会导致溢出。”

时间:2012-02-22 19:31:27

标签: sql-server function tsql date sql-server-2008-r2

MSDN中明确表示:

  

日期参数不能递增到其数据类型范围之外的值。在以下语句中,添加到日期值的数字值超出了日期数据类型的范围。将返回以下错误消息:“向'datetime'列添加值会导致溢出。”

示例:

SELECT DATEADD(year,2147483647, '2006-07-31');
SELECT DATEADD(year,-2147483647, '2006-07-31');

导致错误:

  

“向'datetime'列添加值会导致溢出。”

这似乎是正确的。但是为什么我在执行这个SQL语句时遇到同样的错误:

SELECT DATEDIFF(YY,'1013-12-12',DATEADD(YY,-300,getdate()))

更具体,唯一:

SELECT DATEADD(YY,-300,getdate())

3 个答案:

答案 0 :(得分:10)

First google result for 'sql datetime range'。 1753年1月1日。那是你的下限。

对该问题的评论添加了this trivia关于此下限的来源。

答案 1 :(得分:1)

如果您使用字段进行DateTime转换,请在转换中使用case语句检查字段是否大于1或1000000,那么您不应该再遇到此问题。

答案 2 :(得分:0)

我在比较 2 个日期时遇到同样的错误。

我已经使用 datetime2 数据类型解决了。

例如

select * from TableA where Convert(datetime2,GETUTCDATE()) <= Convert(datetime2,Expirydate)