Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction ADD_MONTHS() dans Oracle

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)

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: