Отображение дат юбилея сотрудника в течение следующего месяца или года текущей даты - PullRequest
2 голосов
/ 02 апреля 2019

в основном пытается создать запрос, который будет отображать даты годовщины сотрудника на предстоящий месяц или год текущей даты, также хотел бы отобразить столбец, показывающий годы службы

SELECT
Employee,
Hire_Date

CASE WHEN DATEADD(YY,DATEDIFF(yy,Hire_Date,GETDATE()),Hire_Date)<GETDATE() THEN DATEDIFF(yy,Hire_Date,GETDATE())
ELSE DATEDIFF(yy,Hire_Date,GETDATE())-1 END AS 'Years of service'

FROM
MyTable

хочет показать сотрудникам даты годовщины в следующем месяце или в следующем году

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я не очень хорошо понимаю, но, если вам нужно знать, кто отмечает годовщину в следующем месяце или в следующем году, вы должны использовать функцию DATEDIFF для фильтрации данных.

Пример:

SELECT Employee, Hire_Date, DATEDIFF(year, Hire_Date, getdate()) as YearsService
FROM MyTable
-- if you need fetch to next month, you should use <= 1
WHERE DATEDIFF(month, CONCAT(YEAR(GETDATE()), '-', MONTH(Hire_Date), '-' , DAY(Hire_Date)), GETDATE()) = 1 
0 голосов
/ 02 апреля 2019

Вот проверенный сценарий (см. Ниже) для отображения сотрудников с датой рождения в следующем месяце.

Замените mytable своей таблицей

declare @mytable as table(employe varchar(100), birth_date datetime,hire_date datetime)

insert into @mytable values
('name1','01/01/1972','01/01/2000') ,
('name2','12/02/1985','01/02/2003') ,
('name3','04/12/1990','03/04/2005') ,
('name4','05/03/1969','12/12/2005') ,
('name5','04/02/1968','12/02/2010') ,
('name6','04/04/1968','12/11/2009') ,
('name7','12/03/1978','01/01/2019') ,
('name8','01/12/2000','03/02/2018') ,
('name9','12/12/1970','05/02/2019') ,
('name10','04/04/1980','04/04/2018') 

select employe,birth_date,hire_date,
CASE WHEN DATEADD(YY,DATEDIFF(yy,Hire_Date,GETDATE()),Hire_Date)<GETDATE() THEN DATEDIFF(yy,Hire_Date,GETDATE())
ELSE DATEDIFF(yy,Hire_Date,GETDATE())-1 END AS 'Years of service'
from @mytable where (
month(getdate()) < 12 
and 
month(birth_date)=1+month(getdate()) )
or (month(getdate())=12 and month(birth_date)=1)

enter image description here

...