sql - 通过向日期列添加值来删除重叠导致溢出
问题描述
我的问题与此有关。当我尝试执行此查询时:
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
解决方案
我认为问题来自以下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
推荐阅读
- ruby - 如何使“何时”字符串不区分大小写?
- java - java InputStream最后不返回-1
- jquery - 将对象添加到 ajax 发布成功列表的最佳实践
- design-patterns - 装饰器设计模式用例
- git - git merge 丢弃没有冲突的新更改
- javascript - 为什么/什么时候 ng-content 是好的做法?
- javascript - 在Javascript中,如何根据文本的字母值将新选项添加到Html Select中
- java - 如何使用 apache lucene 列出所有匹配的行
- oracle - 数据迁移 - Oracle 到 Azure
- r - 预测概率