在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())
答案 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)