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: