SQLServerで指定した月の月末日付を求める方法

プログラミング SQL Server

SQLServerで指定した月の月末日付を求めるには「EOMONTH」関数を使うと簡単に取得できます。
利用できるのはSQLServer 2012以降です。
それ以前のバージョンでの取得方法は以下の記事を参照してください。
[st-card id=1511]

スポンサーリンク

月末日付を取得するEOMONTH

月末日付を取得するEOMONTH関数の使い方は

EOMONTH ( start_date [, month_to_add ] )

です。

次月や前月の月末日付を取得する際は「month_to_add」を指定します。

実際のSQLにすると以下のようになります。

SELECT
EOMONTH(GETDATE() ) AS 当月末日付
,EOMONTH(GETDATE(), 1 ) AS 次月末日付
,EOMONTH(GETDATE(), -1 ) AS 前月末日付
,EOMONTH(GETDATE(), -12 ) AS 前年末日付

実行結果は以下の通りです。

当月末日付 次月末日付 前月末日付 前年末日付
2018-08-31 2018-09-30 2018-07-31 2017-08-31

月初日付を取得するには

指定された月の月初日付を取得するには、前月の末日日付に1を足せば当月の月初日付になるのでDATEADD関数で前月末日付に1を足して計算します。

SELECT
DATEADD(dd, 1, EOMONTH ('2018-08-05' , -1)) AS 当月月初日
,EOMONTH('2018-08-05' ) AS 当月末日
当月月初日 当月末日
2018-08-01 2018-08-31

当期の最終月末日付取得

最後に日本の企業などでよくある「4月~翌年3月末」などの「期」の最終日付もEOMONTH関数を使って計算で取得できるようになります。

DECLARE @target_date_after4 AS DATE = '2018/04/01'
DECLARE @target_date_before4 AS DATE = '2019/02/01'

SELECT
EOMONTH(CASE WHEN MONTH(@target_date_before4) < 4 THEN STR(YEAR(@target_date_before4)) ELSE STR(YEAR(@target_date_before4)+1) END +'/03/31') AS 当期最終日3月まで
,EOMONTH(CASE WHEN MONTH(@target_date_after4 ) < 4 THEN STR(YEAR(@target_date_after4 )) ELSE STR(YEAR(@target_date_after4 )+1) END +'/03/31') AS 当期最終日4月以降

実行結果は

当期最終日3月まで 当期最終日4月以降
2019-03-31 2019-03-31

ですね。
どちらも該当期の最終日(同じ日)になっていますね。

まとめ

月末日付を取得するEOMONTH関数と日付の計算を行うDATEADD関数を上手く組み合わせれば月初日付や月末日付は簡単に取得することができます。

以上、「SQLServerで指定した月の月末日付を求める方法」でした。

タイトルとURLをコピーしました