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週間が取得できます。