在
MSDN
中明确表示:
日期参数不能增加到超出其数据类型范围的值。在以下语句中,与日期值相加的数值超出了日期数据类型的范围。返回以下错误消息:“向‘日期时间’列添加值导致溢出。”
示例:
SELECT DATEADD(year,2147483647, '2006-07-31');
SELECT DATEADD(year,-2147483647, '2006-07-31');
导致错误:
“向‘日期时间’列添加值导致溢出。”
这似乎是对的。但为什么我执行这个 SQL 语句时遇到同样的错误:
SELECT DATEDIFF(YY,'1013-12-12',DATEADD(YY,-300,getdate()))
更具体且唯一:
SELECT DATEADD(YY,-300,getdate())
“sql 日期时间范围”的第一个谷歌结果。 1753 年 1 月 1 日。这是你的下限。
对该问题的评论添加了这个琐事(1/1/1753 在 SQL Server 中的意义是什么? - Stack Overflow)关于这个下限的起源。
如果您对某个字段进行日期时间转换,并在转换中使用 case 语句来检查该字段是否大于 1 OR 1000000,那么您应该不再遇到此问题。
我在比较 2 个日期时遇到相同的错误。
我已经使用 datetime2 数据类型解决了问题。
例如。
select * from TableA where Convert(datetime2,GETUTCDATE()) <= Convert(datetime2,Expirydate)