sql-server - 计算工作年限
问题描述
如果第二个职位是在第一个职位结束后的第二天开始的,我正在尝试找到一种使用 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 天
解决方案
如果我理解正确,您可以使用 selfjoin
和dateadd
:
update e
set e.enddate = null
from EmploymentDateRanges e
join EmploymentDateRanges e2 on dateadd(day, 1, e.enddate) = e2.startdate
这会增加 1 天,enddate
并查看是否有任何对应的记录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)
推荐阅读
- ios - Swift - App Store Connect 版本无法检测 Catalyst 环境
- c# - 爱普生ip打印机打印后插入剪切线
- r - dplyr 总结()
- angular - CurtainsJS GSAP WebGL 列表项鼠标悬停问题
- python - 缺少 1 个必需的位置参数:函数中的“次”
- python - 类型错误:_append_dispatcher()
- ruby-on-rails - 任何避免使用 gsub 的方法!更换
- html - CSS中的文本居中或左边距和右边距不居中按钮
- json - 正则表达式匹配来自 JSON 的键值对
- oracle - Oracle 数据库读取监视器或计数器