首页 > 解决方案 > 计算工作年限

问题描述

如果第二个职位是在第一个职位结束后的第二天开始的,我正在尝试找到一种使用 sql 更新任何用户的就业结束日期的方法。提前致谢!

这是我的数据:

DECLARE @EmploymentDateRanges TABLE
        (
            ID INT IDENTITY (1, 1),
            StartDate DATETIME,
            EndDate DATETIME
        )

INSERT INTO @EmploymentDateRanges
VALUES ('11/1/2018', null)

INSERT INTO @EmploymentDateRanges
VALUES ('8/24/1995', '10/31/2018')

INSERT INTO @EmploymentDateRanges
VALUES ('5/25/1990', '8/24/1994')

如您所见,第一个插入语句中的开始日期是第二个插入语句中结束日期之后的第二天。

我的预期结果是仅更新第二个插入语句中的 enddate 并将其设置为 null。

第三条插入语句中的结束日期不应更改,因为第三条语句中的结束日期和第二条语句中的开始日期之间的差异超过 1 天

标签: sql-server

解决方案


如果我理解正确,您可以使用 selfjoindateadd

update e
set e.enddate = null
from EmploymentDateRanges e 
   join EmploymentDateRanges e2 on dateadd(day, 1, e.enddate) = e2.startdate

这会增加 1 天,enddate并查看是否有任何对应的记录startdate。如果是这样,它将更新enddatenull.


另一种选择是使用exists

update e
set e.enddate = null
from EmploymentDateRanges e 
where exists (select 1
              from EmploymentDateRanges e2
              where dateadd(day, 1, e.enddate) = e2.startdate)

推荐阅读