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

Функция

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

Спецификация
Синтаксические правила
  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|