首页 > 解决方案 > 使用“纳秒”将 dateadd 表达式分配给 SQL (Snowflake) 中的变量时出错

问题描述

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

当我使用任何 date_or_time_part EXCEPT nanosecond 时,分配工作正常。当我使用纳秒时,我收到以下错误:

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-cloud-data-platformdateadd

解决方案


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

今天,在set表达式中,右侧应该是一个简单的表达式,它有一个“快速”的计算路径(不要过多介绍细节)。对于“秒”,存在这样的路径,对于“纳秒”,则不存在。

您可以通过将正确的表达式设为“子查询”表达式来解决此问题,如下所示:

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

推荐阅读