在雪花中获取等效于MONTHS_BETWEEN()的Impala

问题描述 投票:0回答:1

将查询从Impala迁移到Snowflake时遇到问题:

Impala

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我了解到,当在month中指定DATEDIFF时,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-data-warehouse
1个回答
0
投票
您的差异需要达到多少精度?

因为我的第一个电话就是减去两个日期(获得天数的差)-或者您可以只使用datediff提取日期-然后从那里去(如果近似值可以除以30/31或除以如果需要确切的解决方案,则可以计算更复杂的计算)

© www.soinside.com 2019 - 2024. All rights reserved.