使用DATADD和CASE Statement查找并过滤当前年度员工周年日

问题描述 投票:-1回答:1

我试图找到员工周年日期,增量为5年,10年15年等等,我能够得到结果,但我试图过滤在案例陈述中创建的'Anniversary_Year列只显示结果在今年,没有过去或未来的结果只需要即将发生的事情。

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())
sql sql-server case dateadd
1个回答
3
投票

使用WHERE子句仅返回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)
© www.soinside.com 2019 - 2024. All rights reserved.