可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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 till 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
回答1:
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
回答2:
Step back one month, subtract the number of days to the current date, and add one day.
WHERE 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 )
回答3:
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;
回答4:
Select Column1, Column2 From Table1 Where 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.