У меня возникла проблема при переносе запросов из Impala в Snowflake:
Импала
SELECT period
, now() as dt_today
, MONTHS_BETWEEN(now(), period) as mb
FROM my_table
дает
period dt_today mb
--------------------------------------------------------------------------
2018-10-30T21:43:57Z 2020-02-21 10:21:12.827383000 15.709677419354838
Снежинка
SELECT period
, CURRENT_TIMESTAMP() as dt_today
, DATEDIFF('month', CURRENT_TIMESTAMP(), period) as mb
FROM my_table
дает
period dt_today mb
--------------------------------------------------------------------------
2018-10-30T21:43:57Z 2020-02-21 10:21:12.827383000 16
Теперь из документации Snowflake я понимаю, что при указании month
в DATEDIFF
, Snowflake будет использовать только «месяц и год от даты», это означает, что разница не такая точная, как у Impala. Я пробовал реализовать прокси, например, взяв месяц разницу, а затем примените некоторые вычисления, чтобы получить часть с плавающей запятой как таковую, но я все равно получаю неправильное количество месяцев:
DATEDIFF('month', period, CURRENT_TIMESTAMP()) + (GREATEST(DAY(period), DAY(CURRENT_TIMESTAMP())) - LEAST(DAY(period), DAY(CURRENT_TIMESTAMP()))) / 31
а также следующее, чтобы получить еще более точную информацию, но это все равно неверно:
DATEDIFF('day', period, CURRENT_TIMESTAMP())/31 + (GREATEST(DAY(period), DAY(CURRENT_TIMESTAMP())) - LEAST(DAY(period), DAY(CURRENT_TIMESTAMP()))) / 31
Вопрос: как я могу точно воспроизвести MONTHS_BETWEEN()
Импалы в Snowflake?