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