如果参数是数字,我如何才能将雪花中的 javascript 函数设置为 return 一个值,如果参数不是数字,则如何设置另一个值?

How can I get a javascript function in snowflake to return one value if the argument is numeric or another value if the argument is not numeric?

我的公司正在从 Oracle 数据库解决方案过渡到雪花数据仓库。我正在将我们的用户定义的 oracle 函数转换为雪花用户定义的函数。如果传递的值为数字,我们在 oracle 中的一个函数将 return 为 1,如果传递的值为 non-numeric,则为 0。

更具体地说,我想在值列中包含数值时更新列 (x_value)。例如,如果我有一个标题为 creditscore 的字段,行中的值为 700、599、'no record',我需要使用数值更新字段 (xscore) 并将 non-numeric creditscore 保留为空xscore 字段。

我是 javascript 的新手(嗯,不完全是新手 -- 我今天一整天都在用它),但运气不好。这是基本功能:

CREATE OR REPLACE FUNCTION isnum(x variant)
RETURNS integer
LANGUAGE javascript
'
IF (isNan(x))
{
RETURN 1;
}
ELSE RETURN 0;
';

我也试过 typeof 但得到同样的错误,如下所示:

SQL Error [1003] [42000]: SQL compilation error:
syntax error line 4 at position 0 unexpected ''

IF (isNan(x))
{
RETURN 1;
}
ELSE RETURN 0;

''.

感谢您的协助!

如果是Javascript那么区分大小写。

if ( isNaN(x) ) {
  return 1;
} else {
  return 0;
}

或者您始终可以使用三元运算符:

return ( isNaN(x) ? 1 : 0 );

但是,我以前从未使用过 Snowflake,所以如果它需要以特定方式格式化 JS,我无法提供帮助(只是 vanilla JS 语法本身)。

您不需要为此使用用户定义的函数。您可以使用 Snowflake 的 TRY_TO_NUMBER 函数。

create or replace table TEST1 (s string);

insert into TEST1 select ('Not a number');
insert into TEST1 select ('750');

select try_to_number(s) from TEST_IS_NUMBER;

然后你可以从这个select插入。