MONTHS BETWEEN UDF [DEPRECATED]
Description
MONTHS_BETWEEN(date1, date2)Custom UDF overloads
MONTHS_BETWEEN_UDF(timestamp_ltz, timestamp_ltz)
CREATE OR REPLACE FUNCTION PUBLIC.MONTHS_BETWEEN_UDF(FIRST_DATE TIMESTAMP_LTZ, SECOND_DATE TIMESTAMP_LTZ)
RETURNS NUMBER(20,6) IMMUTABLE
AS
$$
CASE WHEN DAY(SECOND_DATE) <= DAY(FIRST_DATE)
THEN TIMESTAMPDIFF(MONTH,SECOND_DATE,FIRST_DATE)
ELSE TIMESTAMPDIFF(MONTH,SECOND_DATE,FIRST_DATE) - 1
END +
(CASE
WHEN DAY(SECOND_DATE) = DAY(FIRST_DATE) THEN 0
WHEN DAY(SECOND_DATE) < DAY(FIRST_DATE) AND TO_TIME(SECOND_DATE) > TO_TIME(FIRST_DATE) THEN DAY(FIRST_DATE) - DAY(SECOND_DATE) - 1
WHEN DAY(SECOND_DATE) <= DAY(FIRST_DATE) THEN DAY(FIRST_DATE) - DAY(SECOND_DATE)
ELSE 31 - DAY(SECOND_DATE) + DAY(FIRST_DATE)
END / 31) +
(CASE
WHEN DAY(SECOND_DATE) = DAY(FIRST_DATE) THEN 0
WHEN HOUR(SECOND_DATE) <= HOUR(FIRST_DATE) THEN HOUR(FIRST_DATE) - HOUR(SECOND_DATE)
ELSE 24 - HOUR(SECOND_DATE) + HOUR(FIRST_DATE)
END / (24*31)) +
(CASE
WHEN DAY(SECOND_DATE) = DAY(FIRST_DATE) THEN 0
WHEN MINUTE(SECOND_DATE) <= MINUTE(FIRST_DATE) THEN MINUTE(FIRST_DATE) - MINUTE(SECOND_DATE)
ELSE 24 - HOUR(SECOND_DATE) + MINUTE(FIRST_DATE)
END / (24*60*31)) +
(CASE
WHEN DAY(SECOND_DATE) = DAY(FIRST_DATE) THEN 0
WHEN MINUTE(SECOND_DATE) <= MINUTE(FIRST_DATE) THEN MINUTE(FIRST_DATE) - MINUTE(SECOND_DATE)
ELSE 24 - HOUR(SECOND_DATE) + MINUTE(FIRST_DATE)
END / (24*60*60*31))
$$
;Oracle
Snowflake
Known Issues
1. Precision may differ from Oracle
Related EWIs
Last updated
Was this helpful?