如果第二个职位是在第一个职位结束后的第二天开始的,我正在尝试使用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')
如您所见,第一个插入语句中的开始日期是第二个插入语句中的结束日期之后的第二天。
我的预期结果是仅更新第二个insert语句中的结束日期,并将其设置为null。
不应更改第三条插入语句中的结束日期,因为第三条语句中的结束日期与第二条语句中的开始日期之间的差值应超过1天
答案 0 :(得分:1)
如果我的理解正确,则可以使用自我join
和dateadd
:
update e
set e.enddate = null
from EmploymentDateRanges e
join EmploymentDateRanges e2 on dateadd(day, 1, e.enddate) = e2.startdate
这会向enddate
添加1天,并查看是否有与此startdate
相关的记录。如果是这样,它将enddate
更新为null
。
另一种选择是使用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)