如何在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