SQLServerで日付範囲から日(または月)ごとのデータを作成する
日付範囲から日ごと、または月ごとに年月日(月ごとの場合、日は1日)を作成する
”2017年1月1日から2017年1月31日まで”のようなFrom/Toの日付範囲があり、そこからカレンダーのように日ごとのデータを取得したい場合、以下のような共通テーブル式(CTE:Common Table Expression)を利用した再帰クエリで作成することができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | WITH DateTable(MyDate) AS ( SELECT CONVERT(DATETIME, '2017/01/01') UNION ALL SELECT DATEADD(d, 1, MyDate) FROM DateTable WHERE MyDate < CONVERT(DATETIME, '2017/01/31') ) SELECT MyDate FROM DateTable |
また、月ごと(日は1日)にデータを取得したい場合は以下のクエリで作成できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | WITH MonthTable(YearMonth) AS ( SELECT CONVERT(DATETIME, '2016/12/01') UNION ALL SELECT DATEADD(m, 1, YearMonth) FROM MonthTable WHERE YearMonth < CONVERT(DATETIME, '2017/03/01') ) SELECT YearMonth FROM MonthTable |