我在运行以下查询时遇到错误。我该怎么处理呢?
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
错误:
向'datetime'列添加值会导致溢出。
当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
答案 0 :(得分: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