如何在Snowflake的VALUES子句中获得有理数?
SELECT * FROM (
VALUES (1/3.0), (2)
) AS t ;
返回:
SQL编译错误:VALUES子句中的表达式[1/3]无效
答案 0 :(得分:3)
这是如此奇特,可以描述为一个错误。
任何除以整数的除法都可以,但是分数会触发错误消息。
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中。
答案 1 :(得分:1)
如果您知道自己有大量有理输入,则只需在选择中进行数学运算即可
SELECT column1/column2 FROM VALUES (1,3),(2,1);
给予:
COLUMN1/COLUMN2
0.333333
2.000000