【发布时间】:2020-02-21 10:45:22
【问题描述】:
我在将查询从 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 documentation 我了解到,当在 DATEDIFF 中指定 month 时,Snowflake 只会“使用从日期开始的月份和年份”这意味着差异不如 Impala 准确。
我尝试实现一个 proxy,例如获取月差,然后应用一些计算来获得浮点部分,但我仍然得到错误的月数:
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
问题:如何在 Snowflake 中准确重现 Impala 的 MONTHS_BETWEEN()?
【问题讨论】:
标签: datediff snowflake-cloud-data-platform