[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. SQLServer SELECT文で連番を振る(項目ごとの連番・通し連番) (さらに&helli…
  2. Visual Studioで開発時、「ファイルを開くダイアログ」を表示時にWindows7がフリーズ…
  3. SSRSのデータセットにクエリが貼り付けられない場合 (さらに…)…
  4. SSRSのパラメータ入力エリアが、英語表記になった場合の対策。 (さらに…)…
  5. NPOIを使ってExcelの読み書きをする方法 (さらに…)…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る