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

Snowflake - Operation in VALUES clause - Invalid expression

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

SELECT * FROM ( 
   VALUES (1/3.0), (2)
) AS  t ;

returns :

SQL compilation error: Invalid expression [1 / 3] in VALUES clause

这太奇特了,可以定性为错误。
任何结果为整数的除法都有效,但分数会触发错误消息。

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

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

SELECT * FROM (VALUES (0.33333333333333333), (2)) AS T(VAL);

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

除法等的细节记录在Scale and Precision in Arithmetic Operations

如果你知道你有大量你想要的理性输入,你可以在 select

中做数学运算
SELECT column1/column2 FROM VALUES (1,3),(2,1);

给予:

COLUMN1/COLUMN2
0.333333
2.000000