我认为这与在字符串中需要转义反斜杠等特殊字符的事实有关。
我经历了类似的事情,我会描述我的情况,希望它能给你一些启发。
我正在编写一个 greenplum 函数,需要创建一个 SQL 命令并将其应用于变量,如下所示:
v_cmd := 'insert into tst_regexp2 (codigo) select cast(t.codigo as integer) from (select regexp_replace(''([:space:]|\u00a0|)+$'', '''') as codigo from tst_regexp) t;';
但是对“\u00a0”的强烈反对在函数创建上抛出了一个恼人的警告。我尝试了正常的转义解决方案,例如复制反冲“\\u00a0”,但没有解决问题。
经过一番研究,我遇到了这个特殊的“E”命令,它告诉你在字符串之前使用它时所有特殊字符都应该被转义,所以下面的命令起到了作用:
v_cmd := 'insert into tst_regexp2 (codigo) select cast(t.codigo as integer) from (select regexp_replace(''([:space:]|'||E'\u00a0|)+$'', '''') as codigo from tst_regexp) t;';
我希望这会有所帮助。
最后,如果您正在编写一个函数来清除特殊字符中的字符串,我建议您看一下regexp。下面的代码我用来清理所有东西(到目前为止),但字符串中的数字,我相信你会找到一个适合你的表达式:
regexp_replace(regexp_replace(regexp_replace(upper(codigo), ''[[:alpha:][:blank:][:punct:][:cntrl:]]'', '''', ''g''), ''[ÀÈÌÒÙÁÉÍÓÚÂÔÊÎÛÃÕ]'', '''', ''g''), ''([:space:]|'||E'\u00a0|)+$'', '''') as codigo
问候