获取上个月的最后日期Transact-SQL

时间:2017-05-25 10:36:46

标签: sql sql-server

我正在尝试获取前一个月的数据,但是最后一天的数据没有获取。

输出:上个月是4月,这个条件仅检索截至4月29日的数据。 4月30日的数据不见了。

请有人帮我纠正这个。

OLH.DateStamp > CONVERT(VARCHAR,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0),101)
And 
OLH.DateStamp < CONVERT(VARCHAR,DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1),101))

提前致谢

2 个答案:

答案 0 :(得分:1)

获取上个月数据的最简单方法是:

OLH.DateStamp >= DATEADD(MONTH, -1, DATEADD(DAY, 1 - DAY(GETDATE()), CAST(GETDATE() as DATE))) AND
OLH.DateStamp < DATEADD(DAY, 1 - DAY(GETDATE()), CAST(GETDATE() as DATE))

但是,这不使用索引。所以,更好的方法是:

DATEADD(DAY, 1 - DAY(GETDATE), CAST(GETDATE() as DATE))

表达式:

{{1}}

返回当月第一天的午夜。

答案 1 :(得分:1)

您应该尝试每月的最后一天<= OLH.Datestamp

要获得所需的输出,您正在寻找:

--Use It In Where Clause 
DECLARE @FirstDayOfLastMonth 
       DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(DATEADD(m, -1, GETDATE() - 
       2)) ), DATEADD(m, -1, GETDATE() - 1)))
,@LastDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -( DAY(GETDATE()) ), GETDATE()))

OLH.DateStamp >=  CONVERT(VARCHAR, @FirstDayOfLastMonth , 101) AND
OLH.DateStamp <=  CONVERT(VARCHAR, @LastDayOfLastMonth , 101)