获取上个月交易 SQL 的最后日期



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

输出:上个月是 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))

提前致谢

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

DATEDIFF(month, OLH.DateStamp, GETDATE()) = 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))

返回当月第一天的午夜。

你应该尝试 当月的最后一天 应该是<= 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)

最新更新