需要幫助編寫查詢以獲取上個月的數據以及月份到日期的數據。如何獲取上個月的數據和月迄今的數據
如果今天的日期是2011年3月23日,我需要檢索上個月的數據和數據直到今天的日期(意味着2011年3月23日)。
如果日期是2011年4月3日,數據應該由3月份當月數據,並直到4月3日的數據2011年
感謝,
Shahsra
需要幫助編寫查詢以獲取上個月的數據以及月份到日期的數據。如何獲取上個月的數據和月迄今的數據
如果今天的日期是2011年3月23日,我需要檢索上個月的數據和數據直到今天的日期(意味着2011年3月23日)。
如果日期是2011年4月3日,數據應該由3月份當月數據,並直到4月3日的數據2011年
感謝,
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)
所以最有可能的
WHERE dateColumn >= DATEADD(month, datediff(month, 0, getdate())-1, 0)
AND dateColumn < DATEADD(DAY, DATEDIFF(day, 0, getdate()), 1)
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;
感謝您給我的鏈接。真的很有用。 – Shahsra 2011-03-23 22:24:03
步驟返回一個月,減去到當前日期的天數,並添加一天。
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)
不精確 - 第二個給出「2011-02-01 10:55:49.160」 – RichardTheKiwi 2011-03-23 21:56:10
@Richard - 謝謝,更新。 – 2011-03-23 22:01:22
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。我知道他發佈之前我正在發佈我的帖子。
不錯,我喜歡過時的解決方案。 – 2011-03-23 22:04:18