【发布时间】:2012-03-13 04:26:27
【问题描述】:
在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())
【问题讨论】:
-
datetime的最小值是 1753 because that was the year after Britain adopted the Gregorian Calendar 你使用的是什么版本的 SQL Server? -
@Joro - 那么
SELECT DATEADD(YY,-300,cast(getdate() as datetime2))会为你工作。 -
@MartinSmith 是的,你是对的。我已经检查了从 0001 年 1 月 1 日到 9999 年 12 月 31 日的日期和 'datetime2' 和 'datetimeoffset' 格式支持。到目前为止的 SQL 语句是否意味着 getdate() 函数的默认类型是 'datetime' 以及为什么如果它据说 'datetime' 和 'smalldatetime' 贬值了。
标签: sql-server function tsql date sql-server-2008-r2