Найти и отфильтровать дату годовщины сотрудников текущего года с помощью DATADD и CASE Statement - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь найти даты годовщины сотрудника с шагом 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())

1 Ответ

3 голосов
/ 04 апреля 2019

Используйте предложение 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)
...