从一对年/月值中减去4个月

时间:2013-03-14 22:38:58

标签: sql sql-server sql-server-2008 sql-server-2005

我想减去4个月,期间定义为年和月:

UPDATE [MAS_YCA].[dbo].[temp_AR_SalesPersonhistory]
SET FiscalYear = year(DATEADD(month,-4,DATEADD(DAY,-1,DATEADD(month,cast(FiscalPeriod as Int),DATEADD(year,cast(FiscalYear as Int)-1900,0))))),
FiscalPeriod = right('00'+cast(month(DATEADD(month,-4,DATEADD(DAY,-1,DATEADD(month,cast(FiscalPeriod as Int),DATEADD(year,cast(FiscalYear as Int)-1900,0))))) as varchar),02)
GO

我得到的错误是Adding value to a datetime column caused an overflow.

字段会计年度和期间都在数据中定义为varchar。

1 个答案:

答案 0 :(得分:0)

听起来您需要检查FiscalYear和FiscalPeriod列中的数据。最有可能的是,您在会计年度列中的年份无效。

SQL Server中的日期范围是1753年1月1日到9999年12月31日。因此,除此之外的任何一年都会导致您的错误。

一个简单的检查(编辑,添加空和空字符串的情况):

Select * from [MAS_YCA].[dbo].[temp_AR_SalesPersonhistory]
where cast(FiscalYear as Int) > 9999 or cast(FiscalYear as Int) < 1753
or FiscalYear is NULL or FiscalYear = ''
相关问题