首页 > 解决方案 > 通过向日期列添加值来删除重叠导致溢出

问题描述

我的问题与此有关。当我尝试执行此查询时:

with toupdate as (
      select t.*,
             lag(enddate) over (partition by employee order by startdate) as prev_enddate
      from MyTable t
     ) 
update toupdate
    set startdate = dateadd(day, 1, prev_enddate)
    where startdate <> dateadd(day, 1, prev_enddate);

我收到此错误消息:

向“日期”列添加值导致溢出。

知道 :

SELECT MIN(BI_StartDate),MIN(BI_EndDate),MAX(BI_StartDate),MAX(BI_EndDate)
FROM MyTable

输出:

MinBIStart  MinBIEnd    MAXBIStart  MAX BIEnd   
1900-12-31  2017-06-27  2020-03-27  9999-12-31

标签: sqlsql-servertsql

解决方案


我认为问题来自以下where条款:

update toupdate
    set startdate = dateadd(day, 1, prev_enddate)
    where (case when prev_enddate < '9999-12-31'
                then 'false'
                when startdate <> dateadd(day, 1, prev_enddate)
                then 'true'
           end) = 'true'

或者,您可以将逻辑替换为:

where dateadd(day, -1, startdate) < prev_enddate

推荐阅读