2016-09-18 13 views
-3

私は毎月実行されているプロシージャを格納していると私は常にロール12ヶ月を実行したい。私は私のストアドプロシージャ、start_dateとend_dateに2つのパラメータがあります。ので、私の挑戦は私が毎月転がり12ヶ月を引っ張ることができるように自動化された開始日と終了日を得ることができないということですどのように私はSQLで最後の12ヶ月を取得する

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' 

:たとえば、今月の私の開始日と終了日は次のようにする必要があります。私は今、ハードコーディングしています。

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) 
関連する問題