在编写查询时需要帮助以获取上个月的数据以及月初至今的数据。
如果今天的日期是2011年3月23日,我需要检索上个月的数据和截至今天的数据(2011年3月23日)。
如果日期是2011年4月3日,则数据应包含3月份的数据和截至2011年4月3日的数据。
谢谢,
Shahsra
答案 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)
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。在我知道他发布之前我就发帖了。