Datetime列导致溢出

时间:2017-10-18 15:43:27

标签: sql sql-server

我在运行以下查询时遇到错误。我该怎么处理呢?

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

1 个答案:

答案 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