Catégories :

Fonctions de date et d’heure

ADD_MONTHS

Ajoute ou soustrait un nombre spécifié de mois à une date ou un horodatage, en préservant les informations de fin de mois.

Syntaxe

ADD_MONTHS( <date_or_timestamp_expr> , <num_months_expr> )

Arguments

Obligatoire :

expr_date_ou_horodatage

Il s’agit de l’expression de date ou d’horodatage à laquelle vous souhaitez ajouter un nombre spécifié de mois.

expr_num_mois

C’est le nombre de mois que vous souhaitez ajouter. Cela devrait être un entier. Cela peut être positif ou négatif. Si la valeur est une valeur numérique non entière (par exemple, FLOAT), la valeur sera arrondie au nombre entier le plus proche.

Renvoie

Le type de données de la valeur renvoyée est identique à celui du premier paramètre. Par exemple, si l’entrée est une DATE, la sortie est une DATE. Si l’entrée est une TIMESTAMP_NTZ, la sortie est une TIMESTAMP_NTZ.

Notes sur l’utilisation

  • ADD_MONTHS renvoie des résultats légèrement différents de ceux utilisés par DATEADD avec un composant MONTH :

    • Pour ADD_MONTHS et DATEADD, si le mois de résultat a moins de jours que le jour d’origine, le jour de résultat du mois correspond au dernier jour du mois de résultat.

    • Pour ADD_MONTHS uniquement, si le jour d’origine est le dernier jour du mois, le résultat du jour du mois sera le dernier jour du mois de résultat.

  • expr_num_mois peut être un entier positif ou négatif pour ajouter ou soustraire des mois, respectivement.

Exemples

Ajoutez 2 mois à une date et convertissez la date en un horodatage sans fuseau horaire :

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

Démontrez la préservation des informations de fin de mois :

  • Ajoutez un mois au dernier jour de février 2016 (une année bissextile).

  • Soustrayez un mois du dernier jour de mai 2016.

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