将查询从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提取日期-然后从那里去(如果近似值可以除以30/31或除以如果需要确切的解决方案,则可以计算更复杂的计算)