我正在尝试获取上一个完整月的数据,但最后一天的数据没有获取。
输出:上个月是 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)