2011-03-23 52 views
8

需要幫助編寫查詢以獲取上個月的數據以及月份到日期的數據。如何獲取上個月的數據和月迄今的數據

如果今天的日期是2011年3月23日,我需要檢索上個月的數據和數據直到今天的日期(意味着2011年3月23日)。

如果日期是2011年4月3日,數據應該由3月份當月數據,並直到4月3日的數據2011年

感謝,

Shahsra

回答

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) 
+0

不錯,我喜歡過時的解決方案。 – 2011-03-23 22:04:18

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; 
+0

感謝您給我的鏈接。真的很有用。 – Shahsra 2011-03-23 22:24:03

3

步驟返回一個月,減去到當前日期的天數,並添加一天。

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

要快速刪除的時候,你可以用這個 演員(樓(CAST(GETDATE()AS FLOAT))AS DATETIME)

所以第二部分將是(無時間)

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

不精確 - 第二個給出「2011-02-01 10:55:49.160」 – RichardTheKiwi 2011-03-23 21:56:10

+0

@Richard - 謝謝,更新。 – 2011-03-23 22:01:22

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。我知道他發佈之前我正在發佈我的帖子。