雪花 regexp_replace 未按预期工作
Snowflake regexp_replace not working as expected
我试图获取用双引号括起来的路径(例如:“path”.“to”.“element”)。它还会去除任何方括号括起来的数组元素引用(如“[0]”)
var path_name = "regexp_replace(regexp_replace("customers[0].name",'\[(.+)\]'),'(\w+)','"\1"')" ;
I tried this method but it is displaying error
所以这是一个写得非常糟糕的问题。不过还是来猜一猜吧。
所以你有一个 Javascript 存储过程,你有那一行,但它没有像你预期的那样工作:让我们猜猜它看起来像:
create or replace procedure sp()
returns VARCHAR
language javascript
as
$$
var txt = '"customers[0].name"';
var sql_regexp1 = '\\[(.+)\\]';
var sql_regexp2 = '(\\w+)';
var sql_rep_2 = '\"\\1\"';
var full_rep1 = "regexp_replace('" + txt + "','"+ sql_regexp1 +"')";
var full_rep2 = "select regexp_replace(" + full_rep1 + ",'"+ sql_regexp2 +"','"+ sql_rep_2 + "');";
//return full_rep2;
var statement = snowflake.createStatement( {sqlText: full_rep2} );
var result_set1 = statement.execute();
result_set1.next()
return result_set1.getColumnValue(1);
$$;
;
如果你取消注释早期的 return 可以看到 full_rep2
因此您可以测试内部 SQL
select regexp_replace('"customers[0].name"','\[(.+)\]');
给出:
REGEXP_REPLACE('"CUSTOMERS[0].NAME"','\[(.+)\]')
"customers.name"
假设这是正确的!
然后你可以检查外部替换:
select regexp_replace(regexp_replace('"customers[0].name"','\[(.+)\]'),'(\w+)','"\1"');
给出:
REGEXP_REPLACE(REGEXP_REPLACE('"CUSTOMERS[0].NAME"','\[(.+)\]'),'(\W+)','""')
""customers"."name""
如果我们调用存储过程:
call sp();
我们得到:
SP
""customers"."name""
所以这就是“我如何调试 SQL/Javascript”以使其“有效工作 SQL。然后问题就变成了,你想要什么输出。你能从这里到达那里吗。
我试图获取用双引号括起来的路径(例如:“path”.“to”.“element”)。它还会去除任何方括号括起来的数组元素引用(如“[0]”)
var path_name = "regexp_replace(regexp_replace("customers[0].name",'\[(.+)\]'),'(\w+)','"\1"')" ;
I tried this method but it is displaying error
所以这是一个写得非常糟糕的问题。不过还是来猜一猜吧。
所以你有一个 Javascript 存储过程,你有那一行,但它没有像你预期的那样工作:让我们猜猜它看起来像:
create or replace procedure sp()
returns VARCHAR
language javascript
as
$$
var txt = '"customers[0].name"';
var sql_regexp1 = '\\[(.+)\\]';
var sql_regexp2 = '(\\w+)';
var sql_rep_2 = '\"\\1\"';
var full_rep1 = "regexp_replace('" + txt + "','"+ sql_regexp1 +"')";
var full_rep2 = "select regexp_replace(" + full_rep1 + ",'"+ sql_regexp2 +"','"+ sql_rep_2 + "');";
//return full_rep2;
var statement = snowflake.createStatement( {sqlText: full_rep2} );
var result_set1 = statement.execute();
result_set1.next()
return result_set1.getColumnValue(1);
$$;
;
如果你取消注释早期的 return 可以看到 full_rep2
因此您可以测试内部 SQL
select regexp_replace('"customers[0].name"','\[(.+)\]');
给出:
REGEXP_REPLACE('"CUSTOMERS[0].NAME"','\[(.+)\]') |
---|
"customers.name" |
假设这是正确的!
然后你可以检查外部替换:
select regexp_replace(regexp_replace('"customers[0].name"','\[(.+)\]'),'(\w+)','"\1"');
给出:
REGEXP_REPLACE(REGEXP_REPLACE('"CUSTOMERS[0].NAME"','\[(.+)\]'),'(\W+)','""') |
---|
""customers"."name"" |
如果我们调用存储过程:
call sp();
我们得到:
SP |
---|
""customers"."name"" |
所以这就是“我如何调试 SQL/Javascript”以使其“有效工作 SQL。然后问题就变成了,你想要什么输出。你能从这里到达那里吗。