Przejdź do głównej zawartości

Zwraca liczbę miesięcy między date1 a 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 i date2 mogą być typu DATE, typu TIMESTAMP lub obu typów naraz.

Funkcja zwraca wartość FLOAT zgodnie z następującymi regułami:

  • Jeśli date1 jest wcześniejsza niż date2, funkcja zwraca wartość ujemną; w przeciwnym razie zwraca wartość dodatnią.

    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
  • Jeśli date1 i date2 przypadają na ten sam dzień swoich miesięcy lub obie są ostatnim dniem swoich miesięcy, wynik jest liczbą całkowitą. W przeciwnym razie funkcja oblicza część ułamkową wyniku na podstawie miesiąca liczącego 31 dni.

    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
  • Jeśli date1 i date2 są tą samą datą, funkcja ignoruje wszelkie składniki czasu i zwraca 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