Categorias:

Funções de data e hora

ADD_MONTHS

Adiciona ou subtrai um número especificado de meses em relação a uma data ou carimbo de data/hora, preservando as informações de fim de mês.

Sintaxe

ADD_MONTHS( <date_or_timestamp_expr> , <num_months_expr> )
Copy

Argumentos

Obrigatório:

date_or_timestamp_expr

Esta é a expressão da data ou do carimbo de data/hora a qual você deseja adicionar um número especificado de meses.

num_months_expr

Este é o número de meses que você deseja adicionar. Ele deve ser um número inteiro. Ele pode ser positivo ou negativo. Se o valor for um valor numérico não inteiro (por exemplo, FLOAT), o valor será arredondado para o inteiro mais próximo.

Retornos

O tipo de dados do valor retornado é o mesmo que o tipo de dados do primeiro parâmetro. Por exemplo, se a entrada for uma DATE, então a saída será uma DATE. Se a entrada for um TIMESTAMP_NTZ, então a saída será um TIMESTAMP_NTZ.

Notas de uso

  • ADD_MONTHS retorna resultados um pouco diferentes de DATEADD usado com um componente MONTH:

    • Tanto para ADD_MONTHS como para DATEADD, se o mês de resultado tiver menos dias do que o dia original, o dia de resultado do mês será o último dia do mês de resultado.

    • Somente para ADD_MONTHS, se o dia original for o último dia do mês, o dia do resultado do mês será o último dia do resultado do mês.

  • num_months_expr pode ser um número inteiro positivo ou negativo para adicionar ou subtrair meses, respectivamente.

Exemplos

Adicionar 2 meses a uma data e converter uma data em um carimbo de data/hora sem fuso horário:

SELECT ADD_MONTHS('2016-05-15'::timestamp_ntz, 2) AS RESULT;
+-------------------------+
| RESULT                  |
|-------------------------|
| 2016-07-15 00:00:00.000 |
+-------------------------+
Copy

Demonstrar a preservação das informações de fim do mês:

  • Adicionar um mês ao último dia de fevereiro de 2016 (um ano bissexto).

  • Subtrair um mês do último dia do mês de maio de 2016.

    SELECT ADD_MONTHS('2016-02-29'::date, 1) AS RESULT;
    +------------+
    | RESULT     |
    |------------|
    | 2016-03-31 |
    +------------+
    
    Copy
    SELECT ADD_MONTHS('2016-05-31'::date, -1) AS RESULT;
    +------------+
    | RESULT     |
    |------------|
    | 2016-04-30 |
    +------------+
    
    Copy