在sql中正确减去月份

在sql中正确减去月份,sql,sql-server,Sql,Sql Server,我想减去3个月,如下所示: DECLARE @ReportingDate date = '6/30/2019' SELECT DATEADD(MONTH, -3,@reportingDate) 但我得到的是“2019-03-30”,而正确的月末应该是“2019-03-31”。如何解决此问题?一个简单的方法是: DECLARE @ReportingDate date = '6/30/2019' SELECT CASE WHEN @ReportingDate = E

我想减去3个月,如下所示:

DECLARE @ReportingDate date = '6/30/2019'

SELECT  DATEADD(MONTH, -3,@reportingDate)
但我得到的是“2019-03-30”,而正确的月末应该是“2019-03-31”。如何解决此问题?

一个简单的方法是:

DECLARE @ReportingDate date = '6/30/2019'

SELECT  CASE
            WHEN @ReportingDate = EOMONTH(@ReportingDate) THEN  EOMONTH(DATEADD(MONTH, -3,@reportingDate))
            ELSE DATEADD(MONTH, -3,@reportingDate)
        END
一个简单的方法是:

DECLARE @ReportingDate date = '6/30/2019'

SELECT  CASE
            WHEN @ReportingDate = EOMONTH(@ReportingDate) THEN  EOMONTH(DATEADD(MONTH, -3,@reportingDate))
            ELSE DATEADD(MONTH, -3,@reportingDate)
        END

您使用的是什么版本的SQL Server?如果是2016或更高,则可以使用EOMONTH()函数。在任意日期之前的三个月内,答案是正确的。如果你总是想要月底,那么更好的方法是从月初开始。休息两个月,然后休息一天。这将一直强制到月底。您使用的是哪个版本的SQL Server?如果是2016或更高,则可以使用EOMONTH()函数。在任意日期之前的三个月内,答案是正确的。如果你总是想要月底,那么更好的方法是从月初开始。休息两个月,然后休息一天。这将永远迫使它到月底。