mik*_*wry 6 javascript sql snowflake-cloud-data-platform
由于某种原因,Snowflake 正在从我的正则表达式函数中删除反斜杠,但仅当我在创建 Javascript 过程时将该函数放在“$$”之间时才删除。
对于上下文,这里是我的正则表达式函数:
CREATE OR REPLACE FUNCTION "REGEX_REPLACE_ME"("SUBJECT" VARCHAR(16777216), "PATTERN" VARCHAR(16777216), "REPLACEMENT" VARCHAR(16777216))
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
AS '
const p = SUBJECT;
let regex = new RegExp(PATTERN, ''i'')
return p.replace(regex, REPLACEMENT);
';
Run Code Online (Sandbox Code Playgroud)
当我简单地在 SQL 中运行它时,它就可以工作;它将把“APPLE.com”更改为“APPLE”。
SELECT REXP_REPLACE_ME('APPLE.COM','\\.[A-Z]{2,3}',' ') -- the regex pattern \\.[A-Z]{2,3} is meant to remove domains i.e. ".com",".org", etc..
Run Code Online (Sandbox Code Playgroud)
但是,当我在存储过程的 $$ 内运行它时,它会从我的正则表达式模式中删除反斜杠,从而完全更改正则表达式模式。
我的正则表达式从变为\\.[A-Z]{2,3}-> .[A-Z]{2,3}
CREATE or replace PROCEDURE TESTING_FUNC_1_THIS_CAN_BE_DELETED()
RETURNS VARCHAR
LANGUAGE javascript
AS
$$
var rs = snowflake.execute( { sqlText:
`
CREATE OR REPLACE VIEW Database.Schema.Table AS
SELECT REXP_REPLACE_ME('APPLE.COM','\\.[A-Z]{2,3}',' ') as column_cleaned
-- ,REXP_REPLACE_ME_WTF('APPLE.COM','\\.[A-Z]{2,3}',' ') AS WHAT_PATTERN_IS_BEING_OUTPUTTED -- function logic in code block below
`
} );
$$;
call TESTING_FUNC_1_THIS_CAN_BE_DELETED();
select * from Database.Schema.Table
Run Code Online (Sandbox Code Playgroud)
在这里挠头,我创建了这个函数来显示它输出的模式,这就是我得出的结论(我在这里可能是错的..),当 Snowflake 编译时,它会删除反斜杠......
CREATE OR REPLACE FUNCTION "REXP_REPLACE_ME_WTF"("SUBJECT" VARCHAR(16777216), "PATTERN" VARCHAR(16777216), "REPLACEMENT" VARCHAR(16777216))
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
AS '
const p = SUBJECT;
let regex = new RegExp(PATTERN, ''i'');
//return p.replace(regex, REPLACEMENT);
return PATTERN;
';
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Snowflake SQL 使用 \ 作为转义字符,因此要在 Snowflake SQL 中表示反斜杠,您必须使用\\。
JavaScript 还使用 \ 作为转义字符,因此要在 JavaScript 中表示反斜杠,您还必须使用\\
如果你想通过 JavaScript 在 Snowflake SQL 中表示单个反斜杠,你必须发送 2 x 2 = 4 个反斜杠\\\\
| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |