Snowflake - VALUES 子句中的操作 - 表达式无效

DaM*_*ill 3 snowflake-cloud-data-platform

我们如何在 Snowflake 的 VALUES 子句中获得有理数?

SELECT * FROM ( 
   VALUES (1/3.0), (2)
) AS  t ;
Run Code Online (Sandbox Code Playgroud)

返回:

SQL 编译错误:VALUES 子句中的表达式 [1 / 3] 无效

Han*_*sen 5

这是非常奇特的,可以被定性为一个错误。
任何产生整数的除法都有效,但分数会触发错误消息。

文档指出:每个表达式
必须是常量,或者是在 SQL 语句编译期间 可以被计算为常量的表达式。大多数简单的算术表达式和字符串函数可以在编译时计算,但大多数其他表达式不能。

显然(1/3)应该是这么简单的算术表达式。简单的解决方法当然是计算答案并包含为十进制数:

SELECT * FROM (VALUES (0.33333333333333333), (2)) AS T(VAL);
Run Code Online (Sandbox Code Playgroud)

转念一想,这并不像看起来那么简单。如果在语句中使用这些值CREATE TABLE AS SELECT,数据类型应该是NUMBER(7,6)FLOAT或其他?也许最好在这些情况下具体说明。

除法等的具体细节记录在算术运算中的比例和精度中。