Кто-нибудь создал пользовательскую функцию Snowflake (SQL), которая принимает десятичные числа в качестве аргументов? - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь создать SQL UDF, который принимает десятичное число в качестве аргумента, но если я передаю число с другим количеством десятичных разрядов, я получаю ошибку, даже если число имеет меньшее количество цифр справа от десятичной точки.

Вот пример проблемы:

CREATE OR REPLACE TABLE EXAMPLE (
    COL1 NUMBER(7,5)
);

INSERT INTO EXAMPLE VALUES (9.12),(10.467),(11.6),(12.01234);

CREATE OR REPLACE FUNCTION LESS_THAN(DATA1 NUMBER(7,5))
  RETURNS TABLE (COL1 NUMBER(7,5))
  as
  $$
    SELECT COL1 FROM EXAMPLE WHERE COL1 < DATA1   
  $$
;

select * from table(LESS_THAN(11.3)); --Error: SQL compilation error: error line 1 at position 20 Invalid argument types for function 'LESS_THAN': (NUMBER(3,1))
select * from table(LESS_THAN(9.85)); --Error: SQL compilation error: error line 1 at position 20 Invalid argument types for function 'LESS_THAN': (NUMBER(3,2))
select * from table(LESS_THAN(10.85001)); --Works

Я хотел бы иметь возможность создать UDF, который позволяет принимать любой десятичный знак.

Есть мысли?

Спасибо

1 Ответ

2 голосов
/ 15 января 2020

Попробуйте привести значения к NUMBER (7,5). Например:

select * from table(LESS_THAN('11.3'::NUMBER(7,5))); 
select * from table(LESS_THAN( 11.3 ::NUMBER(7,5))); 

Вы можете использовать эту системную функцию для наблюдения типов:

select  11.3                x, system$typeof(x); -- NUMBER(3,1)
select  11.30               x, system$typeof(x); -- NUMBER(3,1)
select  11.30 ::NUMBER(7,5) x, system$typeof(x); -- NUMBER(7,5)
select '11.30'::NUMBER(7,5) x, system$typeof(x); -- NUMBER(7,5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...