2013-03-14 75 views
0

我想減去4個月,期間被定義爲年和月:減去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.

的字段會計年度和期間都被定義爲datable中的varchar。

+1

中有什麼fiscalyear和fiscalperiod列中的數據? – JodyT 2013-03-14 22:48:10

+0

您需要顯示一些示例數據,因爲它不清楚「FiscalYear」和「FiscalPeriod」的外觀。你說他們是年份和月份'varchar'值,但是像前導零這樣的細節可能是個問題。爲什麼你將整數存儲爲'varchar'值? – Pondlife 2013-03-15 16:17:03

回答

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 = '' 
+0

它沒有返回任何行。 – 2013-03-14 23:05:59

+0

更新。同時檢查空字符串和空字符串。但我的觀點是,該列(或潛在的月份列,但不太可能)中的某些內容在SQL服務器日期範圍之外,因此請開始尋找。 – 2013-03-14 23:10:43