如果没有提供日期,则返回最近6个月的记录,或者从提供的日期起,返回最近6个月的记录

时间:2018-08-13 14:49:13

标签: sql-server tsql stored-procedures

我有一个存储过程,如果没有提供日期,它将返回过去6个月的所有记录,但是我还希望做的是从提供日期起返回最近6个月的记录。< / p>

使用下面的代码示例(如果未提供日期),那么我想查看2月到7月的记录。但是,如果按照下面的代码提供了日期,那么我希望能够看到从8月到7月的记录。

DECLARE @IncidentDate DATE = null
DECLARE @EmpCode INT = 6000
SET @IncidentDate = '2018-02-05'

SELECT EmpCode
    ,BonusDate
    ,BonusYear
    ,BonusPeriod
    ,GradesScore
    ,Bonus
FROM Bonus  B
WHERE B.EmpCode = @EmpCode
    AND BonusDate >= DATEADD(MONTH, DATEDIFF(Month, 0, DATEADD(m, -6, current_timestamp)), 0)

1 个答案:

答案 0 :(得分:2)

这里的逻辑似乎是,您要从事件发生日期(如果不为空)或从现在开始(如果事件日期为空)从最近6个月开始记录。因此,我认为我们可以将输入日期汇总到现在,以获得您想要的行为:

SELECT ...
FROM Bonus B
WHERE B.EmpCode = @EmpCode AND
    BonusDate >= DATEADD(month, -6, COALESCE(@IncidentDate, GETDATE()));

如果您希望截止日期实际上是今天的午夜,请使用CONVERT(date, GETDATE())而不是GETDATE()

编辑:如果只需要六个月的窗口,请使用此WHERE子句:

WHERE B.EmpCode = @EmpCode AND
    BonusDate BETWEEN DATEADD(month, -6, COALESCE(@IncidentDate, GETDATE())) AND
                      COALESCE(@IncidentDate, GETDATE())