TL; DR
IFF(DAY(DATE1) >= DAY(DATE2), DATEDIFF('month', DATE2, DATE1), DATEDIFF('month', DATE2, DATE1) - 1)
+
IFF(DAY(DATE1) >= DAY(DATE2), (GREATEST(DAY(DATE1), DAY(DATE2)) - LEAST(DAY(DATE1), day(DATE2))) / 31, 1 - (GREATEST(DAY(DATE1), DAY(DATE2)) - LEAST(DAY(DATE1), DAY(DATE2))) / 31)
Импала MONTHS_BETWEEN(DATE1, DATE2)
Функция работает следующим образом:
MONTHS_BETWEEN('2019-04-13', '2019-02-10')
выход 2.0967
(2
полных месяцев + 3/31=0967
) MONTHS_BETWEEN('2019-04-13', '2019-02-03')
урожайность 1.7741
(1
полных месяцев + 1-(7/31)=0967
)
Теперь мы знаем, что Снежинка DATEDIFF(DATE1, DATE3)
применяет простой месяц- месячная операция:
DATEDIFF('month', '2019-04-13', '2019-02-10')
доходность 2
(04 - 02
) DATEDIFF('month', '2019-04-13', '2019-02-03')
доходность 2
(04 - 02
)
Чтобы получить целую часть Impala's MONTHS_BETWEEN
с использованием функций Snowflake, мы применяем следующую логику c:
IFF(DAY(DATE1) >= DAY(DATE2), DATEDIFF('month', DATE2, DATE1), DATEDIFF('month', DATE2, DATE1) - 1)
Для того, чтобы получить дробную часть Impala's MONTHS_BETWEEN
с использованием Snowflake к функциям мы применяем следующие логи c:
IFF(DAY(DATE1) >= DAY(DATE2), (GREATEST(DAY(DATE1), DAY(DATE2)) - LEAST(DAY(DATE1), day(DATE2))) / 31, 1 - (GREATEST(DAY(DATE1), DAY(DATE2)) - LEAST(DAY(DATE1), DAY(DATE2))) / 31)
Мы просто складываем их вместе, чтобы получить точное значение Импалы:
IFF(DAY(DATE1) >= DAY(DATE2), DATEDIFF('month', DATE2, DATE1), DATEDIFF('month', DATE2, DATE1) - 1)
+
IFF(DAY(DATE1) >= DAY(DATE2), (GREATEST(DAY(DATE1), DAY(DATE2)) - LEAST(DAY(DATE1), day(DATE2))) / 31, 1 - (GREATEST(DAY(DATE1), DAY(DATE2)) - LEAST(DAY(DATE1), DAY(DATE2))) / 31)