Запрос:
DECLARE @LastDay DATETIME;
SELECT @LastDay = '2011-02-28';
-- Previous two months "anatomy"
SELECT @LastDay AS LD
,CONVERT(DATETIME, 0) AS ["Day zero"]
,DATEDIFF(MONTH, 0, @LastDay) AS [Months from "Day zero"]
,DATEDIFF(MONTH, 0, @LastDay)-(2-1) AS [Months from "Day zero" - 1 month = previous month]
,DATEADD(MILLISECOND, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, @LastDay)-1, 0)) AS LDPrevious2Months;
-- End of "anatomy"
SELECT @LastDay = '2011-03-31';
SELECT @LastDay AS LD
,DATEADD(MILLISECOND, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, @LastDay)-1, 0)) AS LDPrevious2Months;
SELECT @LastDay = '2011-04-30';
SELECT @LastDay AS LD
,DATEADD(MILLISECOND, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, @LastDay)-1, 0)) AS LDPrevious2Months;
Результаты:
LD "Day zero" Months from "Day zero" Months from "Day zero" - 1 month = previous month LDPrevious2Months
----------------------- ----------------------- ---------------------- ------------------------------------------------- -----------------------
2011-02-28 00:00:00.000 1900-01-01 00:00:00.000 1333 1332 2010-12-31 23:59:59.997
LD LDPrevious2Months
----------------------- -----------------------
2011-03-31 00:00:00.000 2011-01-31 23:59:59.997
LD LDPrevious2Months
----------------------- -----------------------
2011-04-30 00:00:00.000 2011-02-28 23:59:59.997