开发者

How to get the last month data and month to date data

开发者 https://www.devze.com 2023-02-19 21:48 出处:网络
Need help in writing the query to get the last month data as well as month to date data. If today\'s date is Mar 23 2011, I need to retrieve the data from last month and the data til开发者_如何学运维

Need help in writing the query to get the last month data as well as month to date data.

If today's date is Mar 23 2011, I need to retrieve the data from last month and the data til开发者_如何学运维l todays date(means Mar 23 2011).

If date is Apr 3 2011, data should consists of March month data and the data till Apr 3rd 2011.

Thanks,

Shahsra


Today including time info  : getdate()
Today without time info    : DATEADD(DAY, DATEDIFF(day, 0, getdate()), 0)
Tomorrow without time info : DATEADD(DAY, DATEDIFF(day, 0, getdate()), 1)
Beginning of current month : DATEADD(month, datediff(month, 0, getdate()), 0)
Beginning of last month    : DATEADD(month, datediff(month, 0, getdate())-1, 0)

so most likely

WHERE dateColumn >= DATEADD(month, datediff(month, 0, getdate())-1, 0)
  AND dateColumn <  DATEADD(DAY, DATEDIFF(day, 0, getdate()), 1)


Step back one month, subtract the number of days to the current date, and add one day.

WHERE  
  DateField <= GetDate() AND
  DateField >= DateAdd(
      mm, 
      -1, 
      DateAdd(dd, -1*DatePart(dd, GetDate())+1, GetDate())
  )

To remove the time quickly, you can use this Cast( Floor( Cast( GETDATE() AS FLOAT ) ) AS DATETIME )

So the second part would be (without time)

DateField >= Cast( Floor( Cast( (DateAdd(
          mm, 
          -1, 
          DateAdd(dd, -1*DatePart(dd, GetDate())+1, GetDate())
      )) AS FLOAT ) ) AS DATETIME )


Select Column1, Column2 From Table1
Where DateColumn <= GetDate() AND 
DateColumn >= DATEADD(dd, - (DAY(DATEADD(mm, 1, GetDate())) - 1), DATEADD(mm, - 1, GetDate()))

Edit: +1 to Russel Steen. I was posting mine before I knew he had posted.


Very helpful page

declare @d datetime = '2011-04-03';

declare @startDate datetime;
select @startDate =
   CAST('01 '+ RIGHT(CONVERT(CHAR(11),DATEADD(MONTH,-1,@d),113),8) AS datetime);
select @startDate;
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号