SQL Server や T-SQL を初めて学ぶ人のための学習サイトです。 便利なクエリーやチューニングの仕方なども掲載しています。
SQL Server 入門
T-SQL 入門
便利なT-SQL&クエリー集
SQL Server&T-SQLに関するコラム
サイト情報
MCTS: SQL Server 2008, Database Development
サイト内検索
カスタム検索
ホーム > 便利なT-SQL&クエリー集 > 日付範囲から日ごとのデータを作成する

日付範囲から日ごとのデータを作成する

日付範囲から日ごとのデータを作成するには?

「 2014 年 1 月 1 日から 2014 年 1 月 31 日まで 」 のような From と To の日付範囲があり、そこからカレンダーのような日毎のデータを作成したいような時ありますよね。

そんな時に便利な、日付範囲から日ごとのデータを作成するクエリーをご紹介したいと思います。

共通テーブル式:CTE (Common Table Expression) を使った日付範囲から日ごとのデータの作成

日付範囲から日ごとのデータを作成には、いろいろな方法があると思います。

ここでは覚えてしまえばシンプルで簡単な 「共通テーブル式: CTE (Common Table Expression)」 を使用する再起クエリーを使った方法をご紹介します。


共通テーブル式 (CTE) を使用する再起クエリー使って、日付範囲から日毎のデータを取得するクエリーは以下の通りです。

DECLARE @DateFrom   AS DATE = '2014-01-01',
        @DateTo     AS DATE = '2014-01-31';

WITH DateTable (MyDate)
AS
(
     SELECT @DateFrom
     UNION ALL
     SELECT DATEADD(dd, 1, MyDate)
     FROM   DateTable
     WHERE  MyDate < @DateTo
)
SELECT   MyDate
FROM     DateTable
OPTION (MAXRECURSION 0);

日付範囲から日ごとのデータを作成するクエリーの実行結果

青で囲まれている部分がアンカーの定義、緑で囲まれている部分が再起の定義です。

クエリーヒントの MAXRECURSION を使って、再起を繰り返す回数を指定することができます。 ここでは 0(無制限)を指定しています。

0 (無制限)を設定すると、間違った再起クエリーを書くと無限ループになってしまう可能性があるので、気をつけてくださいね。

日付範囲から日ごとのデータを作成するクエリーの解説


ちなみに、CTE 内の @DateFrom と @DateTo の箇所に直接日付を指定したい場合は、DATE 型にキャストしないとエラーになります。



ホーム > 便利なT-SQL&クエリー集 > 日付範囲から日ごとのデータを作成する

© 2014 SQL Server 入門