分かりやすく、使いやすく。

Nヶ月後、Nヶ月前の日付を計算する方法

スポンサーリンク
  1. Nヶ月後 の日付を計算する。
  2. Nヶ月前 の日付を計算する。
  3. 月末日の場合(日数が多い月から、日数が少ない月を計算した場合)
  4. 月末日の場合(日数が少ない月から、日数が多い月を計算した場合)


Nヶ月後 の日付を計算する。

Nヶ月後の日付を計算する場合、 DATEADD 関数を使用します。

tsql(書式)
1
DATEADD(month, N, 日付) 

例えば、2015年10月15日の3ヶ月後を計算する場合、以下のように指定します。

tsql(実行可能なサンプルコード)
1
2
3
4
5
--以下はいずれも 2016-01-15 00:00:00.000 が返されます。
SELECT 
  DATEADD(month, 3, '20151015'),
  DATEADD(month, 3, '2015/10/15'),
  DATEADD(month, 3, '2015-10-15') 

Nヶ月前 の日付を計算する。

Nヶ月の日付を計算する場合、 DATEADD 関数の第二引数にマイナスの数字を指定します。

tsql(書式)
1
2
--Nにマイナスを指定する。
DATEADD(month, N, 日付) 

例えば、2015年10月15日の11ヶ月前を計算する場合、以下のように指定します。

tsql(実行可能なサンプルコード)
1
2
3
4
5
--以下はいずれも 2014-11-15 00:00:00.000 が返されます。
SELECT 
  DATEADD(month, -11, '20151015'),
  DATEADD(month, -11, '2015/10/15'),
  DATEADD(month, -11, '2015-10-15') 

月末日の場合(日数が多い月から、日数が少ない月を計算した場合)

日数が多い月の月末日からNヶ月後(Nヶ月前)を計算して日数が少ない月になった場合は、Nヶ月後(Nヶ月前)の月末日が返されます。

例えば3月31日の1ヶ月後は、4月30日になります。3月31日の1ヶ月前は、2月のうるう日を考慮した上で月末日が返されます。

実際に実行した結果は以下の通りです。

tsql(実行可能なサンプルコード)
1
2
3
4
5
6
7
SELECT 
  --以下は 2015-04-30 00:00:00.000 を返します
  DATEADD(month,  1, '2015/3/31'),
  --以下は 2015-02-28 00:00:00.000 を返します
  DATEADD(month, -1, '2015/3/31'),
  --以下は 2016-02-29 00:00:00.000 を返します
  DATEADD(month, -1, '2016/3/31') 

月末日の場合(日数が少ない月から、日数が多い月を計算した場合)

日数が少ない月の月末日からNヶ月後(Nヶ月前)を計算して日数が多い月になった場合は、日の部分は変わりません。

例えば、4月30日の1ヶ月後は5月30日になり、4月30日の1ヶ月前は3月30日になります。

tsql(実行可能なサンプルコード)
1
2
3
4
5
SELECT 
  --以下は 2015-05-30 00:00:00.000 を返します
  DATEADD(month,  1, '2015/4/30'),
  --以下は 2015-03-30 00:00:00.000 を返します
  DATEADD(month, -1, '2015/4/30') 
スポンサーリンク