Aller au contenu

Renvoie le nombre de mois entre date1 et date2.

func.months_between(<date1>, <date2>)
func.months_between(func.to_date('2024-03-15'), func.to_date('2024-02-15'))
┌───────────────────────────────────────────────────────────────────────────────┐
│ func.months_between(func.to_date('2024-03-15'), func.to_date('2024-02-15')) │
├───────────────────────────────────────────────────────────────────────────────┤
│ 1 │
└───────────────────────────────────────────────────────────────────────────────┘
func.months_between(func.to_date('2024-02-15'), func.to_date('2024-03-15'))
┌───────────────────────────────────────────────────────────────────────────────┐
│ func.months_between(func.to_date('2024-02-15'), func.to_date('2024-03-15')) │
├───────────────────────────────────────────────────────────────────────────────┤
│ -1 │
└───────────────────────────────────────────────────────────────────────────────┘
MONTHS_BETWEEN( <date1>, <date2> )

date1 et date2 peuvent être de type DATE, de type TIMESTAMP, ou un mélange des deux.

La fonction renvoie une valeur FLOAT selon les règles suivantes :

  • Si date1 est antérieure à date2, la fonction renvoie une valeur négative ; sinon, elle renvoie une valeur positive.

    SELECT
    MONTHS_BETWEEN('2024-03-15'::DATE,
    '2024-02-15'::DATE),
    MONTHS_BETWEEN('2024-02-15'::DATE,
    '2024-03-15'::DATE);
    -[ RECORD 1 ]-----------------------------------
    months_between('2024-03-15'::date, '2024-02-15'::date): 1
    months_between('2024-02-15'::date, '2024-03-15'::date): -1
  • Si date1 et date2 tombent le même jour de leur mois respectif, ou si ce sont toutes deux le dernier jour de leur mois respectif, le résultat est un entier. Sinon, la fonction calcule la partie fractionnaire du résultat sur la base d’un mois de 31 jours.

    SELECT
    MONTHS_BETWEEN('2024-02-29'::DATE,
    '2024-01-29'::DATE),
    MONTHS_BETWEEN('2024-02-29'::DATE,
    '2024-01-31'::DATE);
    -[ RECORD 1 ]-----------------------------------
    months_between('2024-02-29'::date, '2024-01-29'::date): 1
    months_between('2024-02-29'::date, '2024-01-31'::date): 1
    SELECT
    MONTHS_BETWEEN('2024-08-05'::DATE,
    '2024-01-01'::DATE);
    -[ RECORD 1 ]-----------------------------------
    months_between('2024-08-05'::date, '2024-01-01'::date): 7.129032258064516
  • Si date1 et date2 correspondent à la même date, la fonction ignore les composantes d’heure et renvoie 0.

    SELECT
    MONTHS_BETWEEN('2024-08-05'::DATE,
    '2024-08-05'::DATE),
    MONTHS_BETWEEN('2024-08-05 02:00:00'::TIMESTAMP,
    '2024-08-05 01:00:00'::TIMESTAMP);
    -[ RECORD 1 ]-----------------------------------
    months_between('2024-08-05'::date, '2024-08-05'::date): 0
    months_between('2024-08-05 02:00:00'::timestamp, '2024-08-05 01:00:00'::timestamp): 0