使用 'nanosecond' 将 dateadd 表达式分配给 SQL 中的变量时出错 (Snowflake)

Error assigning a dateadd expression using 'nanosecond' to a variable in SQL (Snowflake)

我正在尝试将 dateadd 表达式的结果分配给 Snowflake sql 脚本中的变量。

当我使用任何 date_or_time_part 除了纳秒 时,分配工作正常。当我使用纳秒时,出现以下错误:

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');

看起来像一个错误,

select dateadd("nanosecond", -1, '2019-10-25') from dual

似乎工作得很好,同时秒和纳秒的数据类型相同 - 我们转换为 TIMESTAMP_NTZ(9) 的日期,所以也没有区别。

这确实是Snowflake目前的一个局限。

今天,在set 表达式中,右侧应该是一个简单的表达式,其中有一个"fast" 计算路径(不赘述)。对于 "second",这样的路径存在,对于 "nanosecond",则不存在。

您可以通过将正确的表达式设为 "subquery" 表达式来解决此问题,如下所示:

set x = (select dateadd(nanosecond, -1, '2019-10-25'));