VALUES子句中的SnowflakeOperation无效表达式



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

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

退货:

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

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

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

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

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

转念一想,这并不像看上去那么直截了当。如果在CREATE TABLE AS SELECT语句中使用这些值,那么数据类型应该是NUMBER(7,6)FLOAT还是其他类型?也许在这些情况下最好具体一点。

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

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

SELECT column1/column2 FROM VALUES (1,3),(2,1);

给予:

COLUMN1/COLUMN2
0.333333
2.000000

相关内容

  • 没有找到相关文章

最新更新