[SQL Server]CTE式の再帰呼び出しを利用して日付テーブルを作成する

[スポンサードリンク]

「2017/12/28」から「2017/01/05」までとかの日付が格納されたテーブルを作る。あと「2017/05」とかの年月テーブルも作る方法。

概要

たいていのシステムでは、カレンダーテーブルや、稼動日カレンダーなどの日付が格納されたテーブルがあり、それをクロスジョインすれば、ある程度の結果は取れる。
しかし、そんなものがない場合、はクエリで日付テーブルを作成しなければならない。

「WHILE」でループして開始日~終了日を作ると、パフォーマンスが悪くなるため、次のようにする。

年月日テーブルを作成

年月日のみ

クエリで列名を指定した場合

WITH句で列名を指定した場合

日付の日本語表記と曜日



曜日番号を取得するには「DATEPART関数」、曜日名を取得するには「DATENAME」を使用する。

だいたい
曜日は、プログラム内で処理する場合は曜日番号。表示する際には「○曜日」とか「月、火、水・・・」などの1文字となる。

年月テーブルの作成

スラッシュ区切りのみ

年月表示の場合

注意点

桁数を合わせること

「UNION ALL」の上下でデータ型と桁数を合わせないとエラーになる。

メッセージ 240、レベル 16、状態 1、行 4
再帰クエリ “date_table” の列 “date_value” で、アンカーの型と再帰部分の型が一致していません。

FORMAT関数の戻り値は文字型の最大桁数のため、「varchar(10)」で合わせている。

WHERE句の「<」について

WHERE句の「<」を「<=」にしなければならないと思いがちだが、それだと値が一つ増えるので「<」にしておくこと。

[スポンサードリンク]

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


ピックアップ記事

  1. ビューの作り方、ANSI_NULLS、QUOTED_IDENTIFIER、WITH(NOLOCK) …
  2. dpiAwareの設定を変える。 (さらに…)…
  3. SQL Server認証ができるようにする設定方法 (さらに…)…
  4. 本記事ではXMLからSQLを取得し、SQLiteで実行する。プリペアードステートメントを使用する。 …
  5. 画面のパラメータにより異なる検索条件や、異なるテーブルのデータを取得する際。 「UNION ALL…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る