Получить дату предыдущих двух месяцев на основе значения параметра - PullRequest
0 голосов
/ 10 октября 2011

У меня есть значение параметра datetime в хранимой процедуре, которое получит значение типа '30 -Sep-2011', и это значение всегда будет последним днем ​​месяца!Как я могу получить дату предыдущих двух месяцев на основе полученного значения?И значения также должны быть последним днем ​​месяца!

Ответы [ 3 ]

1 голос
/ 10 октября 2011

Запрос:

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
1 голос
/ 10 октября 2011
declare @TwoMonthsBack datetime 

select @TwoMonthsBack= dateadd(dd,-1, DateAdd(MM,-2,DateAdd(dd,1,@YourInputDateParam)))

Пример:

declare @YourInputDateParam datetime = '30-Sep-2011'
declare @TwoMonthsBack datetime 
select @TwoMonthsBack= dateadd(dd,-1, DateAdd(MM,-2,DateAdd(dd,1,@YourInputDateParam)))

SELECT @TwoMonthsBack

Отпечатки:

2011-07-31 00:00:00.000

Объяснение:

Взять введенную дату (всегда последний день месяца, как указано);добавить один день (первый день следующего месяца - 1 октября из примера);вычесть 2 месяца (сделаем первый день 1 месяца назад от даты ввода - 1 августа на примере);вычесть 1 день (будет последний день 2 месяца назад от даты ввода - 31 июля на примере)

0 голосов
/ 06 февраля 2014
declare @start_date datetime
--declare @start_date1 datetime
declare @end_date datetime
--set @start_date1 =(select DATEDIFF(mm,GETDATE() ,getdate()))
set @start_date =(select DATEADD (mm,-10,getdate()))

set @end_date = (select convert(varchar(20),GETDATE()))
print @end_date
print @start_date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...