我正在尝试将dateadd表达式的结果分配给Snowflake sql脚本中的变量。
当我使用任何date_or_time_part EXCEPT纳秒时,分配工作正常。当我使用纳秒级时,出现以下错误:
Unsupported feature 'assignment from non-constant source expression'**
是否存在纳秒级行为不同的原因,或者这是一个错误?
-- 'second' is successfully set into the variable
set foo = dateadd("second" , -1, '2019-10-25');
-- 'nanosecond' throws an error:
-- Unsupported feature 'assignment from non-constant source expression'.
set bar = dateadd("nanosecond", -1, '2019-10-25');
这确实是Snowflake的当前限制。
[今天,在set
表达式中,右侧应该是一个简单的表达式,为此,它有一条“快速”的计算路径(不要过多地关注细节)。对于“秒”,存在这样的路径,对于“纳秒”,则不存在。
您可以通过将正确的表达式设为“子查询”表达式来解决此问题,如下所示:
set x = (select dateadd(nanosecond, -1, '2019-10-25'));
看起来像个错误,
select dateadd("nanosecond", -1, '2019-10-25') from dual
似乎工作得很好,并且同时数据类型在第二和十亿分之一秒都是相同的-我们将日期转换为TIMESTAMP_NTZ(9)的日期,因此两者之间也没有差异。