Помесячное изменение даты

Функция

Арифметическое добавление месяцев к исходной дате.

Спецификация
 
Синтаксические правила
  1. < Значимое выражение > должно иметь тип DATE или приводиться к нему.

  2. < Количество месяцев > – численное значение типа INT, SMALLINT, BIGINT, NUMERIC, REAL, DOUBLE или приводимое к нему.

  3. Аргументы могут быть заданы < SQL-параметром >, который должен содержать спецификацию типа данных параметра.

    select sysdate as "Дата зачатия", add_months(sysdate, ? (int)) as "Дата рождения";
    9
     Дата зачатия           Дата рождения
     ------------           -------------
    |12.03.2014:11:11:23.32|12.12.2014:11:11:23.32|

Возвращаемое значение
  1. Возвращается значение типа DATE, увеличенное (уменьшенное) на заданное < количество месяцев >.

  2. При положительном значении аргумента < количество месяцев > формируется будущая дата, при отрицательном – прошлая по сравнению с исходной.

    select add_months(cast '15-04-2006' as date, 3), add_months(cast '15-04-2006' as date, -3);
    |15.07.2006:00:00:00|15.01.2006:00:00:00|
  3. Если значение параметра < количество месяцев > не является целочисленным значением, оно усекается до целой части.

    select add_months(cast '15-04-2006' as date,3.6),
           add_months(cast '15-04-2006' as date,-3.4),
           add_months(cast '15-04-2006' as date,.5);
    |15.07.2006:00:00:00|15.01.2006:00:00:00|15.04.2006:00:00:00|
  4. При добавлении месяцев номер дня в результирующей дате не меняется, за исключением тех случаев, когда он приходится на конец месяца.

    select add_months(cast '31-01-2006' as date, 1),
           add_months(cast '28-02-1999' as date, 12),
           add_months(cast '31-05-2006' as date, -1);
    |28.02.2006:00:00:00|29.02.2000:00:00:00|30.04.2006:00:00:00|