我有以下字符串:'AAA|BBB||CCC|1.23'
我想返回:'CCC|1.23'
当使用regexp:\w+\|\d(.\d+|$)时,我能够获得所需的结果。
在Snowflake中运行以下查询时,将返回正确的结果:
SELECT REGEXP_SUBSTR('AAA|BBB||CCC|1.23', '\\w+\\|\\d(.\\d+|$)') AS regexp_return;但是,当在存储过程中使用时,如下所示:
CREATE OR REPLACE PROCEDURE dnr.regexp_issue ()
returns string
language javascript
execute as owner
AS
$$
var sql_statement = `SELECT REGEXP_SUBSTR('AAA|BBB||CCC|1.23', '\\w+\\|\\d(.\\d+|$)') AS regexp_return;`
var query = snowflake.createStatement({sqlText: sql_statement});
var query_res = query.execute();
query_res.next();
result = query_res.getColumnValue(1);
return result;
$$;生成的CALL dnr.regexp_issue();返回一个NULL,就好像没有找到匹配的模式一样。
有什么想法吗?
发布于 2021-02-18 10:49:34
斜杠需要双引号,因为它们要通过两个字符串解析器。
CREATE OR REPLACE PROCEDURE regexp_issue ()
returns string
language javascript
execute as owner
AS
$$
var sql_statement = `SELECT REGEXP_SUBSTR('AAA|BBB||CCC|1.23', '\\\\w+\\\\|\\\\d(.\\\\d+|$)') AS regexp_return;`
var query = snowflake.createStatement({sqlText: sql_statement});
var query_res = query.execute();
query_res.next();
result = query_res.getColumnValue(1);
return result;
$$;
call regexp_issue();提供:
REGEXP_ISSUE
CCC|1.23发布于 2021-02-18 12:07:57
为了补充西蒙的答案,你也可以在雪花的双反斜杠字符串的末尾使用.replace(/\\/g, "\\\\")。这避免了使用四重反斜杠JavaScript + Snowflake SQL转义字符。它可以使字符串更易读。它看起来像这样:
var sql_statement = `SELECT REGEXP_SUBSTR('AAA|BBB||CCC|1.23', '\\w+\\|\\d(.\\d+|$)') AS regexp_return;`.replace(/\\/g, "\\\\");您还可以将其放在两个单独的行中,以便更加清晰,并增加几微秒的处理时间。
var sql_statement = `SELECT REGEXP_SUBSTR('AAA|BBB||CCC|1.23', '\\w+\\|\\d(.\\d+|$)') AS regexp_return;`
sql_statement = sql_statement.replace(/\\/g, "\\\\");https://stackoverflow.com/questions/66252736
复制相似问题