2016-09-18 77 views
-3

我有存儲過程每個月運行,我總是想運行滾動12個月。我有2個參數在我的存儲過程中,start_date和end_date。例如,我的開始日期和結束日期爲本月應該是這樣的:我如何得到過去12個月的sql

declare @start_date date 
declare @end_date date 

set @start_date = '2016-08-01' 
set @end_date = '2015-09-01' 
exec myStoredProc 
@DateBegin = @start_date 
, @DateEnd = @end_date 
, @DateType = 'DISCHARGE DATE' 
, @ShowAllResultTables = 'N' 

,所以我的挑戰是,我不能讓自動化,這樣我就可以每月拉12個月滾動的開始和結束日期。我現在很難編碼。

set @start_date = '2016-08-01' 
    set @end_date = '2015-09-01' 

請大家幫忙。感謝

回答

0
Declare @Date Date,@DateR1 Date,@DateR2 Date 

Set @Date=GetDate() 
Set @DateR2=DateAdd(DAY,-Day(@Date)+1,@Date) 
Set @DateR1=DateAdd(MONTH,-13,@DateR2) 

Select @DateR1,@DateR2 

返回

2015-08-01   2016-09-01 
0
declare @Date datetime = getdate(); 

WITH T AS(
SELECT 
    DATEADD(month, DATEDIFF(month, 0, @Date), 0) AS Start, 
    DATEADD(d, -DAY(DATEADD(m,1,@date)),DATEADD(m,1,@date)) AS EndDate, 
    12 Cnt 
UNION ALL 
SELECT 
    DATEADD(month, -1, Start), 
    DATEADD(d, -DAY(DATEADD(m,1,Start-1)),DATEADD(m,1,Start-1)), 
    Cnt-1 
FROM 
    T 
WHERE 
    Cnt-1>0 
) 
SELECT 
    Start, EndDate 
FROM T 

SQL function for last 12 months

0

這樣做的最快和最有效的方式:

SELECT DATEADD(MONTH,-N, CAST(getdate()-(day(getdate())-1) AS date)) 
FROM (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) t(N)