Snowflake cloud data platform 存储过程中的REGEXP_SUBSTR函数返回null
我有以下字符串:Snowflake cloud data platform 存储过程中的REGEXP_SUBSTR函数返回null,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有以下字符串: “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
“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;
$$;
生成的调用dnr.regexp_issue()
返回一个NULL
,就好像没有找到匹配的模式一样
有什么想法吗?斜杠需要双引号,因为它们要经过两个字符串分析器
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
要添加到Simeon的答案中,您还可以在带有双反斜杠的字符串末尾使用
。替换(/\\/g,“\\\\”)
。这避免了使用四个反斜杠JavaScript+雪花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, "\\\\");
字符串是否不需要双斜杠,或者是否需要双斜杠(我之前在postgresql的shell脚本中有后者),它们需要根据雪花文档进行双斜杠: