雪花 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。然后问题就变成了,你想要什么输出。你能从这里到达那里吗。