【问题标题】:How to Remove extra Backslash(/) in Snowflake using Stored Procedure?如何使用存储过程删除雪花中多余的反斜杠(/)?
【发布时间】:2021-12-19 06:43:35
【问题描述】:

使用下面的选择查询,我可以获得删除多余斜杠的所需结果(3)

答案:

select regexp_replace(regexp_replace('p\\\\','[\\|\\\\\|\\\|\\\\]','~'),'(~~|~)','\\\\');

在 StoredProcedure 中使用相同的查询时会引发错误:

Invalid regular expression: '[|\||\]', missing ]: [|\||\] At Statement.execute

存储过程代码:

create or replace procedure back_slash(something varchar)
returns varchar
language javascript
execute as caller
as
$$
var command1=`select regexp_replace(regexp_replace('p\\\\','[\\|\\\\\|\\\|\\\\]','~'),'(~~|~)','\\\\')`;
var stmt1=snowflake.createStatement({sqlText: command1});
var rs1=stmt1.execute();
return 'successfully removed extra backslashs'
$$;

【问题讨论】:

  • 反斜杠是 SP 中的转义字符,因此对于每个反斜杠,您需要添加另一个来转义它

标签: sql stored-procedures snowflake-cloud-data-platform


【解决方案1】:

所以这个:

select regexp_replace(regexp_replace('p\\\\','[\\|\\\\\|\\\|\\\\]','~'),'(~~|~)','\\\\');

返回:

p\

像这样改变你的存储过程:

create or replace procedure back_slash(X1 varchar)
returns varchar
language javascript
execute as caller
as
$$
var command1="select regexp_replace(regexp_replace('p\\\\','[\\|\\\\\|\\\|\\\]','~'),'(~~|~)','\\\\')";
var stmt1=snowflake.createStatement({sqlText: command1});
var rs1=stmt1.execute();
rs1.next();
return rs1.getColumnValue(1);
$$;

它会起作用的。请注意,我在 ] 之前删除了一个 \

call back_slash('x');

结果:

p\

【讨论】:

    【解决方案2】:

    Snowflake SQL 使用反斜杠作为转义字符。要在 Snowflake SQL 中表示单个反斜杠,您必须使用两个 \\

    JavaScript 也使用反斜杠作为转义字符。要通过 JavaScript 在 Snowflake SQL 中表示单个反斜杠,您必须使用 2x2=4 反斜杠\\\\

    参考这个问答:

    Snowflake removing backslashes during Procedure compilation?

    create or replace procedure back_slash(X1 varchar)
    returns varchar
    language javascript
    execute as caller
    as
    $$
    var command1="select regexp_replace(regexp_replace('p\\\\\\\\','[\\\\|\\\\\\\\\\|\\\\\\|\\\\\\\\]','~'),'(~~|~)','\\\\\\\\')";
    var stmt1=snowflake.createStatement({sqlText: command1});
    var rs1=stmt1.execute();
    rs1.next();
    return rs1.getColumnValue(1);
    $$;
    
    call back_slash('p\\\\');
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 2013-04-20
      • 2020-05-18
      • 2016-12-22
      • 1970-01-01
      相关资源
      最近更新 更多