2017-03-24 4 views
0

私はテーブルを作成しているが、列私は2000年から2020年にこれらの列にすべての日付、月、年を挿入一括するにはどうすればよい2000年から2020年までのすべての日付とすべての月をテーブルに挿入する方法は?

date ID, Month ID, year ID 

とSQL Server 2008のtime_rangeと呼ばれますか?これを行う簡単なクエリはありますか?

ありがとうございました。

から:

1/1/2000 | January |2000 

TO:

31/12/2020| December | 2020 
+0

あなたはちょうどdにしようとしたくないと思っていますあなたは今まで何をしているのかアップロードしてください... – etsa

答えて

0

これを行うには、再帰CTEを使用することができます。

with cte (dateId) 
as (
    select cast('2000-01-01' as date) 

    union all 

    select dateadd(day, 1, dateId) 
    from cte 
    where dateId < cast('2020-12-31' as date) 
    ) 
select dateId, 
    datename(Month, dateId) as monthId, 
    year(dateId) as yearId 
from cte 
option (maxrecursion 0); -- to remove the recursion limit 

あなたが他のテーブルへの挿入を行うためにこれを使用することができます

+0

GurVあなたの助けてくれてありがとう。私は初心者であり、私はあなたの助けを借りてCTEのおかげで多くのことを知りませんでした。また、新しいテーブル "オペランドタイプのクラッシュに挿入中に問題に直面しました:日付はintと互換性がありません"それぞれの列に対して、新しいテーブルにはすべてのデータが格納されます。 – star

+0

確かに:)もう一度ありがとう。 – star

関連する問題