SQLをうまく利用するとカレンダーを作成することができます。
今回はSQL Serverで月曜日始まりの1週間分のカレンダーを作成します。
カレンダー作成
SQL Serverで月曜日始まりの1週間分のカレンダーを作成します。
実行するSQL
実行するSQLは以下のものです。
Declare @cal_day VARCHAR(10) = DATEADD( DAY, -1 * DATEPART( weekday, GETDATE() ) + 2, GETDATE() );
WITH weekly_day AS
(
SELECT
CONVERT( VARCHAR(10), @cal_day, 111 ) AS target_date
,DATENAME( weekday, @cal_day) AS ww
,DATENAME( MONTH,@cal_day) AS mm
,RIGHT('00'+ DATENAME( DAY,@cal_day),2) AS dd
UNION all
SELECT
CONVERT( VARCHAR(10),DATEADD( day, 1, target_date ), 111 )
,DATENAME( weekday,DATEADD( day, 1 ,target_date))
,DATENAME( MONTH,DATEADD( day, 1 ,target_date)) AS mm
,RIGHT('00' + DATENAME( DAY,DATEADD( day, 1 ,target_date)),2) AS dd
FROM
weekly_day
WHERE weekly_day.target_date < DATEADD( day, 6 ,@cal_day )
)
SELECT
mm +'/' + dd + '(' + SUBSTRING(ww,1,1) + ')' AS calender
FROM
weekly_day
1行目で当日(GETDATE())の含まれる最初の月曜日をDATEPART()関数を使って求めます。
その後取得した月曜日の日付を使って再帰SQLで1週間分の日付を求めます。
実行結果
実行した結果は
| calender |
|---|
| 08/26(月) |
| 08/27(火) |
| 08/28(水) |
| 08/29(木) |
| 08/30(金) |
| 08/31(土) |
| 09/01(日) |
です。
日曜日始まりのカレンダーにするには
1行目の
「-1 * DATEPART( weekday, GETDATE() ) + 2」
を
「-1 * DATEPART( weekday, GETDATE() ) + 1」
に変えると日曜日始まりの1週間が取得できます。
