SQLServerでは関数で今日は当月の第何週目か取得する関数がないので、自作しました。
SQLで今日は第何週、何曜日か取得する
SQLServerでは関数で今日は当月の第何週目か取得する関数がないので、自作しました。
当日の日付から計算して第何週目か取得
実際に計算してDATENAME()関数と組み合わせて当月の第何週目の何曜日か出してます。
DECLARE @today VARCHAR(10) = CONVERT(VARCHAR(10), GETDATE() , 111 ) SELECT @today + 'は第' + CAST(( DATENAME( DAY, CAST( @today AS DATE ) ) + 6) / 7 AS VARCHAR ) + DATENAME( weekday, CAST( @today AS DATE )) + 'です。' AS data_name
実行結果は
2013/12/18は第3水曜日です。
です。
内容
CAST(( DATENAME( DAY, CAST( @today AS DATE ) ) + 6) / 7 AS VARCHAR )
で当日が該当月の何週目かを求めています。
DATENAME( weekday, CAST( @today AS DATE ))
はDATENAME()関数で当日の曜日を取得しています。
処理をユーザー定義関数化
処理をユーザー定義関数化にして取得する日付けを
指定できるようにすると
CREATE FUNCTION [dbo].[第何週目か取得関数] ( @today VARCHAR(10) = '2013/12/24' ) RETURNS VARCHAR(128) BEGIN DECLARE @ret VARCHAR(128) = '' SELECT @ret = @today + 'は第' + CAST(( DATENAME( DAY, CAST( @today AS DATE ) ) + 6) / 7 AS VARCHAR ) + DATENAME( weekday, CAST( @today AS DATE )) + 'です。' AS data_name RETURN @ret END
のようになります。
実行結果は
2013/12/24は第4火曜日です。
です。