[SQL Server] 月末の日付(月末日)を求めたい / EOMONTH関数 / 月末日を取得

inno
2014-11-23 15:25 12037 0
[SQL Server] 月末の日付(月末日)を求めたい / EOMONTH関数 / 月末日を取得

月末の日付を求めたい時がたまにあると思うが、
普通は下記のように作成するとできる。

日付変数のデータ型が文字列の場合、
DECLARE @StartDate char(10)
SET @StartDate = '2012/02/03'

SELECT DATEADD(MM, 1, LEFT(@StartDate,7)+'/01')-1 AS Result1
-- もしくは
SELECT DATEADD(DD, -1, DATEADD(MM, 1, LEFT(@StartDate,7)+'/01')) AS Result2

実行結果


日付変数のデータ型がdatetimeの場合、
DECLARE @StartDate datetime
SET @StartDate = '2012/02/03'

SELECT DATEADD(MM, 1, CONVERT(CHAR(7),@StartDate,111)+'/01')-1 AS Result1
-- もしくは
SELECT DATEADD(DD, -1, DATEADD(MM, 1, CONVERT(CHAR(7),@StartDate,111)+'/01')) AS Result2

実行結果


上記のように使っても問題はないが、
SQL SERVER 2012からはもっと簡単にできる関数が登場した。

EOMONTH関数だ。
では、使い方を説明する。

DECLARE @StartDate_char char(10)
DECLARE @StartDate_datetime datetime
SET @StartDate_char = '2012/02/03'
SET @StartDate_datetime = CONVERT(datetime, @StartDate_char)

--CHAR型データ
SELECT EOMONTH(@StartDate_char) AS Result1_1

--DATETIME型データ
SELECT EOMONTH(@StartDate_datetime) AS Result2_1

実行結果


またEOMONTH関数に引数で指定月から何カ月後の月末日を求めることができる。
例えば、2012/02/03の2ヶ月後、つまり4月の末日を求めるには下記のように作成する。

SELECT EOMONTH('2012/02/03', 2) AS Result1_2

実行結果


コメント