Снежинка - Операция в предложении VALUES - Неверное выражение - PullRequest
1 голос
/ 31 октября 2019

Как мы можем получить рациональное число в предложении VALUES в Snowflake?

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

возвращает:

Ошибка компиляции SQL: неверное выражение [1/3] в предложении VALUES

Ответы [ 2 ]

3 голосов
/ 31 октября 2019

Это настолько странно, что это можно охарактеризовать как ошибку.
Любое деление, которое приводит к целому числу, работает, но дроби вызывают сообщение об ошибке.

Документация гласит, что:
Каждое выражение должно быть константой или выражение, которое может быть оценено как константа во время компиляции оператора SQL. Большинство простых арифметических выражений и строковые функции могут быть вычислены во время компиляции, но большинство других выражений не могут.

Очевидно, (1/3) должно быть таким простым арифметическим выражением. Простой обходной путь, конечно, состоит в том, чтобы вычислить ответ и включить в качестве десятичного числа:

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

Во-вторых, это не так просто, как кажется. Если эти значения используются в операторе CREATE TABLE AS SELECT, должен ли тип данных быть NUMBER(7,6) или FLOAT или что-то еще? Возможно, в этих случаях лучше всего быть конкретными.

Особенности деления и т. Д. Задокументированы в Масштаб и точность в арифметических операциях .

1 голос
/ 31 октября 2019

, если вы знаете, что у вас есть большое количество рациональных входных данных, которые вы хотите, вы можете просто сделать математику в

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

, давая:

COLUMN1/COLUMN2
0.333333
2.000000
...