2017-10-18 158 views
0

我在運行以下查詢時遇到錯誤。我應該如何處理它?日期時間列導致溢出

update a 
set pidate = case 
when PromisedYear is not null 
then dateadd(week, cast(PromisedWeek as int), dateadd(year, PromisedYear - 1900, 0)) 
else '2020-12-31' 
end 
FROM #CuringATPDualOutput1 a 

錯誤:

Adding a value to a 'datetime' column caused an overflow.

當Promisedweek小於59,例如44或45,該查詢工作正常。 只給了一個錯誤,當它是59

數據:

44 2017 
44 2017 
44 2017 
44 2017 
44 2017 
45 2017 
45 2017 
45 2017 
45 2017 
45 2017 
46 2017 
45 2017 
45 2017 
45 2017 
45 2017 
59 NULL 
46 2017 
59 NULL 
45 2017 
45 2017 
46 2017 
46 2017 
46 2017 
47 2017 
47 2017 
47 2017 
48 2017 
48 2017 
48 2017 
49 2017 
49 2017 
49 2017 
50 2017 
50 2017 
50 2017 
51 2017 
51 2017 
+2

提供樣本數據和期望的結果。 –

+0

@GordonLinoff請檢查帖子,我已經編輯它。 – Doosu

+3

你是如何處理NULL的?如果你不是,它會導致你的問題。 – Leonidas199x

回答

0

這是你的樣本數據和您發佈的查詢。我甚至增加了一些大於59的樣本數據行,他們工作得很好。我懷疑你還有其他事情。

declare @Output table 
(
    PromisedWeek int 
    , PromisedYear int 
    , pidate datetime 
) 

insert @Output values 
(44, 2017, null) 
, (45, 2017, null) 
, (46, 2017, null) 
, (47, 2017, null) 
, (48, 2017, null) 
, (49, 2017, null) 
, (50, 2017, null) 
, (51, 2017, null) 
, (59, NULL, null) 
, (59, 2017, null) 
, (379, 2017, null) 

update @Output 
set pidate = case 
when PromisedYear is not null 
then dateadd(week, cast(PromisedWeek as int), dateadd(year, PromisedYear - 1900, 0)) 
else '2020-12-31' 
end 

select * from @Output 

事實上,即使您的原始代碼與這些數據一起工作,也不會拋出異常。

select dateadd(week, cast(PromisedWeek as int), dateadd(year, PromisedYear - 1900, 0)) 
from @Output 
where PromisedWeek = 59 
+0

你好Sean,你最後一次嘗試運行更新查詢可以嗎?我用我的代碼的確切查詢編輯了我的帖子。 – Doosu

+0

你應該可以很容易地測試它。我給你提供了一個測試裝置。而你的更新代碼仍然沒有錯誤。 –

+0

我想我得到了錯誤,我的#CuringATOPDualOutput1列PromisedYear有空白值,而不是NULL。我想這是導致錯誤。可能嗎?空白和空白是不同的權利? – Doosu