2017-10-18 4 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 

エラー:Promisedweekが59未満の場合

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

、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ではなく、BLANK値を持っています。私はそのエラーを引き起こしていると思います。出来ますか? NullとBlankは違うのですか? – Doosu

関連する問題