如何获取上个月的数据和月初数据

时间:2011-03-23 21:45:23

标签: sql sql-server tsql sql-server-2008

在编写查询时需要帮助以获取上个月的数据以及月初至今的数据。

如果今天的日期是2011年3月23日,我需要检索上个月的数据和截至今天的数据(2011年3月23日)。

如果日期是2011年4月3日,则数据应包含3月份的数据和截至2011年4月3日的数据。

谢谢,

Shahsra

4 个答案:

答案 0 :(得分:14)

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)

很可能

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

答案 1 :(得分:3)

退回一个月,减去当前日期的天数,然后再添加一天。

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

要快速删除时间,您可以使用此功能 施放(地板(施放(GETDATE()AS FLOAT))AS DATETIME)

所以第二部分是(没有时间)

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

答案 2 :(得分:0)

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;

答案 3 :(得分:0)

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

编辑:+1给Russel Steen。在我知道他发布之前我就发帖了。