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: