Dans Oracle Database, le ADD_MONTHS()
La fonction ajoute un nombre donné de mois à une date et renvoie le résultat.
Syntaxe
La syntaxe ressemble à ceci :
ADD_MONTHS(date, integer)
Où date
peut être une valeur datetime ou toute valeur qui peut être implicitement convertie en DATE
.
L'integer
l'argument peut être un entier ou toute valeur pouvant être implicitement convertie en entier.
Le type de retour est toujours DATE
, quel que soit le type de données de date
.
Exemple
Voici un exemple :
SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;
Résultat :
01/APR/20
Cet exemple affiche la date en fonction de la valeur du NLS_DATE_FORMAT
de mon système paramètre (qui est actuellement DD/MON/RR
). Nous pouvons soit changer ce paramètre, soit utiliser une fonction comme TO_CHAR()
pour renvoyer le résultat dans un format différent.
Exemple :
SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;
Résultat :
2020-04-01
Soustraire des mois
Pour soustraire des mois d'une date, utilisez une valeur négative pour le deuxième argument.
Exemple :
SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;
Résultat :
01/OCT/19
Passer divers formats de date
La date peut être fournie dans différents formats, tant qu'elle correspond à une date :
SELECT ADD_MONTHS('01 Jan 2020', 3)
FROM DUAL;
Résultat :
01/APR/20
Mais en passer un qui ne peut pas être résolu génère une erreur :
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT ADD_MONTHS('Jan 01 2020', 3) FROM DUAL Error report - ORA-01858: a non-numeric character was found where a numeric was expected
Cependant, cela peut dépendre de la valeur du NLS_DATE_FORMAT
paramètre. Si nous modifions ce paramètre :
ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Résultat :
VALUE ____________ Mon DD RR
Et relancez la requête :
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Résultat :
Apr 01 20
Nous n'obtenons plus l'erreur.
Arguments nuls
Passer une date de null
renvoie null
:
SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;
Résultat :
null
Mais passer null pour le second argument génère une erreur :
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT ADD_MONTHS('2020-01-01', null) FROM DUAL Error report - ORA-01843: not a valid month
Notez que par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null
se produit à la suite d'un SQL SELECT
déclaration.
Cependant, vous pouvez utiliser SET NULL
pour spécifier une autre chaîne à renvoyer. Dans l'exemple ci-dessus, j'ai précisé que la chaîne null
doit être retourné.
Nombre d'arguments invalide
La transmission d'un nombre d'arguments non valide entraîne une erreur :
SELECT ADD_MONTHS(3)
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT ADD_MONTHS(3) FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: