新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

SQL Server でカレンダーテーブルを作る方法

SQL Server(Azure SQL Database)で、カレンダーテーブルが欲しかったので作成方法メモです。

ググったところ、「WITH」でテーブルを作成し、そのテーブル定義の中の「UNION ALL」から再帰呼び出しして作るようです。

WITH

_calendar AS
(
SELECT
    CAST(N'2019-01-01' AS DATE) AS dt
UNION ALL
SELECT
    DATEADD(DAY, 1, _tbl.dt) AS dt  /* 日付間隔はここで調整 */
FROM _calendar AS _tbl
WHERE
    _tbl.dt < N'2019-12-31'
)

SELECT
*
FROM _calendar
OPTION ( MAXRECURSION 0 )  /* 再帰無制限 */

最初のSELECTでスタートして、UNION ALLで連結していくようなイメージです。

毎回WHEREのチェックが入り、条件に一致しなくなると終了します。

再帰回数はデフォルトで100回までのため、オプションで0にして無制限にしています。

連番も作れますね。

参考記事

https://sqlite-date.com/calendar

https://sql55.com/query/date-range-to-list-of-dates.php

https://knowledge.reontosanta.com/archives/1013