2011-10-10 34 views
0

我在存儲過程中有一個日期時間參數值,它將接收像'30 -Sep-2011'這樣的值,並且該值將始終是該月的最後一天!我如何根據收到的價值獲得前兩個月的日期?而且價值觀也必須是本月的最後一天!根據參數值獲取前兩個月的日期

+0

什麼SQL Server版本? –

回答

1
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 

說明:

採取輸入日期(月的總是最後一天,按規定);增加一天(將在下個月的第一天 - 例子中的10月1日);減去2個月(將從輸入日期開始的1個月前的第一天 - 示例中的8月1日);減去1天(將使其從輸入日期的2個月前的最後一天 - 在例如7月31日)

+0

不是七月的最後一天......你可以添加一天,減去兩個月,然後減去我懷疑的一天。 '@ TwoMonthsBack = DateAdd(DD,-1,DateAdd(MM,-2,DateAdd(DD,1,@YourInputDateParam)))' –

+0

@Mootinator。我明白你的意思了。我剛剛意識到7月有31天! heheh。讓我解決它。 ;) – Icarus

1

查詢:

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

+1 - 你可以簡化這個' - (2-1)'。也許'-1' :)。 –

+1

:-)是的。用於OP:我的意圖是OP查看此操作的原因「(NumOfMonths -1)」=「(2個月 - 1個月)」 –

0
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 
相關問題