昨日これ書いたので
Oracle の add_months を SQL Server dateadd(month, ~) の結果と同じにするのを考えてみる - お だ のスペース
どうせなら逆も用意しようかなと。*1
add_months から dateadd(month, ~) は、元が月末の時は、必ず月末になるようにしたら良さそう。*2
SQL Server 2012 以降なら、月末日を取る + 月の加算もしてくれる eomonth があります。
EOMONTH (Transact-SQL)
この blog でも以前取り上げてました。
月末日を取得する - お だ のスペース
移行する方で、今更 2008 とか居ないと思うので、eomonth 使って書いてます。
CREATE FUNCTION [ADD_MONTHS] ( @target date, @plus int ) RETURNS date AS BEGIN DECLARE @ret date select @ret = case when eomonth(@target) = @target then eomonth(@target, @plus) else dateadd(month, @plus, @target) end RETURN @ret END GO
ファンクション作らないならこんな感じ。
select case when eomonth(cast(getdate() as date)) = cast(getdate() as date) then eomonth(cast(getdate() as date), 2) else dateadd(month, 2, cast(getdate() as date)) end as ADD_MONTHS
多分ちゃんと動きます。
*1:Oracle から SQL Server への移行される方のために!
*2:時刻は無視します。