使用 DATADD 和 CASE 语句查找并过滤到当年的员工周年纪念日
Find and filter to current year employees anniversary date using DATADD and CASE Statement
我正在尝试以 5 年、10 年、15 年等为增量查找员工周年纪念日期,我能够得到结果,但我正在尝试过滤创建的“Anniversary_Year 列在 case 语句中只显示当年的结果,不需要过去或未来的结果。
SELECT Employee,Hire_Date
CASE
WHEN DATEADD(year, 5, Hire_Date) >= GETDATE()
THEN DATEADD(year, 5, Hire_Date)
ELSE NULL
END AS '5_Year_Anniversary',
CASE
WHEN DATEADD(year, 10, Hire_Date) >= GETDATE()
THEN DATEADD(year, 10, Hire_Date)
ELSE NULL
END AS '10_Year_Anniversary',
CASE
WHEN DATEADD(year, 15, Hire_Date) >= GETDATE()
THEN DATEADD(year, 15, Hire_Date)
ELSE NULL
END AS '15_Year_Anniversary',
CASE
WHEN DATEADD(year, 25, Hire_Date) >= GETDATE()
THEN DATEADD(year, 25, Hire_Date)
ELSE NULL
END AS '25_Year_Anniversary'
FROM
MyTable
WHERE YEAR(Hire_Date) = YEAR(getdate())
使用 WHERE
子句仅 return 甚至 5 周年纪念行。
SELECT Employee, Hire_Date,
cast(YEAR(getdate()) - YEAR(Hire_Date) as varchar(5)) + 'anniversary'
FROM MyTable
WHERE (YEAR(getdate()) - YEAR(Hire_Date)) % 5 = 0
and YEAR(getdate()) > YEAR(Hire_Date)
我正在尝试以 5 年、10 年、15 年等为增量查找员工周年纪念日期,我能够得到结果,但我正在尝试过滤创建的“Anniversary_Year 列在 case 语句中只显示当年的结果,不需要过去或未来的结果。
SELECT Employee,Hire_Date
CASE
WHEN DATEADD(year, 5, Hire_Date) >= GETDATE()
THEN DATEADD(year, 5, Hire_Date)
ELSE NULL
END AS '5_Year_Anniversary',
CASE
WHEN DATEADD(year, 10, Hire_Date) >= GETDATE()
THEN DATEADD(year, 10, Hire_Date)
ELSE NULL
END AS '10_Year_Anniversary',
CASE
WHEN DATEADD(year, 15, Hire_Date) >= GETDATE()
THEN DATEADD(year, 15, Hire_Date)
ELSE NULL
END AS '15_Year_Anniversary',
CASE
WHEN DATEADD(year, 25, Hire_Date) >= GETDATE()
THEN DATEADD(year, 25, Hire_Date)
ELSE NULL
END AS '25_Year_Anniversary'
FROM
MyTable
WHERE YEAR(Hire_Date) = YEAR(getdate())
使用 WHERE
子句仅 return 甚至 5 周年纪念行。
SELECT Employee, Hire_Date,
cast(YEAR(getdate()) - YEAR(Hire_Date) as varchar(5)) + 'anniversary'
FROM MyTable
WHERE (YEAR(getdate()) - YEAR(Hire_Date)) % 5 = 0
and YEAR(getdate()) > YEAR(Hire_Date)