2016-09-19 4 views
0

年パラメータが入力されたときに今年のすべての月を表示する必要があるという要件があります。年を入力して今月までのリストを取得するSQLクエリ

たとえば、2016と入力すると、9月までの月がすべて表示されます。

これを行うには?どんなアイデアも高く評価されます。

+1

私はパラメータがために使用されているもの得ることはありません。あなたの説明は、今年から数ヶ月を取得するように思われる。 –

答えて

1

以下のスクリプトを使用してください。

;with months (date) 
AS 
(
    SELECT cast(@year+'-01-01' as date) 
    UNION ALL 
    SELECT DATEADD(month,1,date) 
    from months 
    where DATEADD(month,1,date)<= case when @year=YEAR(getdate()) THEN CAST(getdate() as date) ELSE cast(@year+'-12-31' as date) END 
) 
select Datename(month,date) [Month] from months 

出力

enter image description here

+0

ありがとうございました:) –

+0

しかし、パラメータとして2015が与えられたらどうなりますか? 2015年から2016年までのすべての月が引き続き表示されます。これを制限する方法は? –

+0

それはあなたが望んでいたものです..右? –

2

これは再帰CTEと簡単です:

with m as (
     select datefromparts(year(getdate()), 1, 1) as mm 
     union all 
     select dateadd(month, 1, m.mm) 
     from m 
     where m.mm < getdate() 
    ) 
select m.* 
from mm; 

パラメータが何に使用されるか私には不明です。これは今年から数ヶ月を得ます。

+0

「オペランドタイプのクラッシュ:日付がintと互換性がありません」というメッセージが表示されます。試してみると – GuidoG

+0

@GuidoGです。 。 。ああ。これは 'where'節の条件になります。 –

関連する問題