Дата сравнения и разница - PullRequest
0 голосов
/ 04 марта 2020

У меня есть таблица «Сотрудник» с «StartDate» сотрудников.

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

Пока у меня есть достиг этого уровня:

SELECT *
FROM Employee
WHERE DATEDIFF(DAY, DAY(StartDate), DAY(GETDATE())) = 30

... но, похоже, это не работает.

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

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

сначала вы найдете дату следующего месяца

DATEADD(MONTH, 1, GETDATE())

затем Вы найдете сотрудника, у которого StartDate следующий месяц

SELECT *
FROM   Employee
WHERE  DATEPART(MONTH, StartDate) = DATEPART(MONTH, DATEADD(MONTH, 1, GETDATE()))
0 голосов
/ 04 марта 2020

Примерно так будет работать функционально. Функции в предложении where могут вызывать проблемы с большими наборами данных:

declare     @day int = day(getdate())
            ,@month int = month(getdate())

if @month = 12 set @month = 1
else set @month = @month +1

SELECT 
    [columns]
  FROM [table]
where day(Startdate) = @day
and MONTH(Startdate) = @month

Или, если вас не волнует день (думаю, вам, вероятно, нет), тогда:

declare @month int = month(getdate())

if @month = 12 set @month = 1
else set @month = @month +1

SELECT 
    [columns]
  FROM [table]
and MONTH(Startdate) = @month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...