我正在使用S_ResumeWorkHistory
表并存储类似数据
CREATE TABLE S_ResumeWorkHistory (
ResumeID int,
FromMonth int,
FromYear int,
ToMonth int,
ToYear int,
CurrentlyWorking varchar(1)
)
INSERT INTO S_ResumeWorkHistory
(ResumeID, FromMonth, FromYear, ToMonth, ToYear, CurrentlyWorking)
VALUES
(17, 6, 2015, 10, 2016, 'N'),
(17, 10, 2016, -1, -1, 'Y')
我想要像这样的总经验
ResumeId,经验
17、3年3个月
我尝试了此查询
select
SUM(convert(int,DATEDIFF(MONTH, FromMonth+'/1/'+FromYear, (CASE CurrentlyWorking WHEN 'N' THEN ToMonth+'/1/'+ToYear ELSE GETDATE() END))/12)),
SUM(convert(int,DATEDIFF(MONTH, FromMonth+'/1/'+FromYear, (CASE CurrentlyWorking WHEN 'N' THEN ToMonth+'/1/'+ToYear ELSE GETDATE() END)) % 12))
FROM S_ResumeWorkHistory
谢谢您的帮助。
答案 0 :(得分:4)
如果我理解您的问题,则可以尝试以下方法。首先,使用DATEFROMPARTS()
和DATEDIFF()
获取日期与日期之间的差异,然后将该差异计算为年和月。
输入
CREATE TABLE S_ResumeWorkHistory (
ResumeID int,
FromMonth int,
FromYear int,
ToMonth int,
ToYear int,
CurrentlyWorking varchar(1)
)
INSERT INTO S_ResumeWorkHistory
(ResumeID, FromMonth, FromYear, ToMonth, ToYear, CurrentlyWorking)
VALUES
(17, 6, 2015, 10, 2016, 'N'),
(17, 10, 2016, -1, -1, 'Y')
声明
;WITH MonthsCTE AS (
SELECT
ResumeId,
CASE
WHEN CurrentlyWorking = 'N' THEN DATEDIFF(month, DATEFROMPARTS(FromYear, FromMonth, 1), DATEFROMPARTS(ToYear, ToMonth, 1))
ELSE DATEDIFF(month, DATEFROMPARTS(FromYear, FromMonth, 1), GETDATE())
END AS Months
FROM S_ResumeWorkHistory
)
SELECT
ResumeId,
(CONVERT(nvarchar(100), SUM(Months) / 12)) + ' years, ' +
(CONVERT(nvarchar(100), SUM(Months) % 12)) + ' months' AS Experience
FROM MonthsCTE
GROUP BY ResumeId
输出
ResumeId Experience
17 3 years, 9 months