CREATE OR REPLACE FUNCTION CLEAN_STRING(in_str varchar) returns varchar
AS
$$
def strip_slashes(in_str):
while in_str.endswith("\\") or in_str.endswith("/"):
in_str = in_str[:-1]
in_str = in_str.replace("\\", "/")
return in_str
clean_str = strip_slashes(in_str)
return clean_str
$$
LANGUAGE plpythonu ;这给了我IndentationError。但是,如果我去掉反斜杠,它工作得很好。如何在plpythonu中处理反斜杠?
发布于 2018-07-15 21:45:45
我现在使用了下面的变通方法。
CREATE OR REPLACE FUNCTION CLEAN_STRING(in_str varchar) returns varchar
AS
$$
def strip_slashes(in_str):
while in_str.endswith(chr(92)) or in_str.endswith("/"):
in_str = in_str[:-1]
in_str = in_str.replace(chr(92), "/")
return in_str
clean_str = strip_slashes(in_str)
return clean_str
$$
LANGUAGE plpythonu ;发布于 2018-07-16 20:10:23
我认为这与以下事实有关:在字符串中,您需要转义特殊字符,如反斜杠。
我经历了类似的事情,我将描述我的情况,希望它能给你带来一些启发。
我正在编写一个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_replace(regexp_replace(regexp_replace(upper(codigo), ''[[:alpha:][:blank:][:punct:][:cntrl:]]'', '''', ''g''), ''[ÀÈÌÒÙÁÉÍÓÚÂÔÊÎÛÃÕ]'', '''', ''g''), ''([:space:]|'||E'\u00a0|)+$'', '''') as codigo问候
https://stackoverflow.com/questions/51341157
复制相似问题