日期比较和差异

问题描述 投票:0回答:2

我有带有员工“ StartDate”的“ Employee”表。

我想获得下个月将要上班的所有雇员的名单。

到目前为止,我已经达到了这一点:

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

...但是这似乎不起作用。

sql sql-server ssms
2个回答
2
投票

我想获得下个月将要上班的所有雇员的名单。

首先找到下个月的日期

DATEADD(MONTH, 1, GETDATE())

然后您找到StartDate是下个月的员工

SELECT *
FROM   Employee
WHERE  DATEPART(MONTH, StartDate) = DATEPART(MONTH, DATEADD(MONTH, 1, GETDATE()))

0
投票

类似的功能将起作用。不过,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

0
投票

您只需要这个:

SELECT *
FROM Employee
WHERE MONTH(StartDate) - 1 = MONTH(GETDATE())

AND MONTH(StartDate) - 1 = MONTH(GETDATE())说下个月是周年月份

© www.soinside.com 2019 - 2024. All rights reserved.