SQLServerで指定された年月日の月末日付を取得するにはちょっとしたプログラムを作る必要があります。
指定された年月日の月末日付を取得
SQLserverには指定された年月日の月末日付を取得する関数がないようなので、SQLで指定された年月日の月末日付を取得してみます。
SQLServer2012以降ではEOMONTH関数がサポートされました。
作成したストアドプロシジャー
作成したストアドプロシジャーです。
Declare @chk_date AS varchar(10) = ‘20120228’
Declare @chk_day AS int
Declare @last_day AS int
–日付として正しいかチェックする
IF ISDATE( @chk_date ) = 0
BEGIN
PRINT( ‘[‘ + CAST(@chk_date AS VARCHAR ) + ‘]は日付ではありません。’)
RETURN 1
END
–最大の年月はチェックするとオーバーフローするのでしない
IF CAST( @chk_date AS INT ) < '99991200'
BEGIN
--指定された年月日かあの日を取得する
SELECT @chk_day = DAY( @chk_date )
--指定月の月末を取得する
SELECT @last_day = DAY( CONVERT( DATETIME, CONVERT( CHAR(6), DATEADD( m, 1, @chk_date ), 112 ) + '01') - 1)
--指定の日と取得した月末の日が違う
IF @chk_day != @last_day
BEGIN
PRINT( '[' + CAST(@chk_date AS VARCHAR ) + ']は月末ではありません。' )
END
--指定の日と取得した月末の日が同じ
ELSE
BEGIN
PRINT( '[' + CAST(@chk_date AS VARCHAR ) + ']は月末です。' )
END
END
--最大の年月のチェック
ELSE
BEGIN
--指定された年月日かあの日を取得する
SELECT @chk_day = DAY( @chk_date )
IF @chk_day = 31
BEGIN
PRINT( '[' + CAST(@chk_date AS VARCHAR ) + ']は月末です。' )
END
ELSE
BEGIN
PRINT( '[' + CAST(@chk_date AS VARCHAR ) + ']は月末ではありません。' )
END
END
[/sql]
大体のエラーチェックもできるはずです。
@chk_dateの値を自由に設定して試してみてください。
これを関数化しておけば便利です。