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

Fonction MONTHS_BETWEEN() dans Oracle

Dans Oracle Database, le MONTHS_BETWEEN() renvoie le nombre de mois entre deux dates.

Syntaxe

La syntaxe ressemble à ceci :

MONTHS_BETWEEN(date1, date2)

Exemple

Voici un exemple :

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;

Résultat :

4

Dans ce cas, il y a exactement quatre mois entre les deux dates.

Le mois et le dernier jour du mois sont définis par le paramètre de session NLS_CALENDAR . Voir Comment vérifier les valeurs des paramètres NLS pour savoir quel calendrier votre session utilise. Le mien utilise le calendrier grégorien.

Mois fractionnaires

La fonction permet des mois fractionnaires. Si les deux dates incluent des portions de jour différentes, Oracle Database détermine le composant fractionnaire applicable à utiliser.

Exemple :

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;

Résultat :

3.51612903225806451612903225806451612903

Mois négatifs

Si la deuxième date est postérieure à la première, alors un montant négatif est renvoyé :

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;

Résultat :

-4

Dates hors plage

Les dates nulles et les autres dates hors plage entraînent une erreur.

Exemple :

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;

Résultat :

Error starting at line : 1 in command -
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL
Error at Command Line : 1 Column : 47
Error report -
SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0
01841. 00000 -  "(full) year must be between -4713 and +9999, and not be 0"
*Cause:    Illegal year entered
*Action:   Input year in the specified range

Comme l'indique le message d'erreur, l'année (complète) doit être comprise entre -4713 et +9999 , et ne pas être 0 .

Comparer une date avec la date actuelle

Nous pouvons passer SYSDATE comme argument datetime pour comparer une date avec la date actuelle :

SELECT 
    SYSDATE,
    MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;

Résultat :

     SYSDATE     MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') 
____________ ____________________________________________ 
13/AUG/21       -102.587825194145758661887694145758661888

Argument manquant

Appel de MONTHS_BETWEEN() avec le mauvais nombre d'arguments, ou sans passer d'arguments, génère une erreur :

SELECT MONTHS_BETWEEN()
FROM DUAL;

Résultat :

Error starting at line : 1 in command -
SELECT MONTHS_BETWEEN()
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: