SQLで月曜日始まりのカレンダー作成

記事内に広告が含まれています。

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

スポンサーリンク
スポンサーリンク
【PR】
SQL学習におすすめの本
SQL Server
スポンサーリンク
タイトルとURLをコピーしました