月末日を取得する

SQL Server Advent Calendar 17日目 です。

今日は、月末日(月の最終日)を取得します。
よくあるのは、翌月1日の日付型から、-1日するやり方でしょうか。
DATEADD (Transact-SQL)

declare @today datetime = getdate()
select dateadd(day, -1, 
  convert(datetime, 
    left(convert(char, dateadd(month, 1, @today), 112), 6) + '01', 
    112)
) -- 2013/12/31 00:00:00.000

翌月1日を求めるために、色々面倒な事をしています。

SQL Server 2012 以降を使っている場合は、もっと楽に変換可能です。
EOMONTH (Transact-SQL)

declare @today datetime = getdate()
select eomonth(@today) -- 2013/12/31

EOMONTH は、省略可能な第二パラメータで月の加減算が行えます。

select eomonth(getdate(), -1) -- 2013/11/30
select eomonth(getdate()) -- 2013/12/31
select eomonth(getdate(), 1) -- 2014/01/31