regex in postgresql function



我需要从Postgres数据库表中通过正则表达式删除(通过函数)可能的非拉丁字符(中文,日文,…)

我已经尝试了我能在网上找到的所有解决方案,但似乎都不起作用。

CREATE OR REPLACE FUNCTION public.function_104(param text)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN  
EXECUTE 'UPDATE public.' || quote_ident(param) || ' SET "name" = REGEXP_REPLACE("name", [^x00-x7F]+, " ")';
END
$function$

我一直运行到以下错误信息:

psycopg2.errors.SyntaxError: syntax error at or near "["
LINE 1: ..._roads_free_1 SET "name" = REGEXP_REPLACE("name", [^x00-x7F]...
^
QUERY:  UPDATE public.gis_osm_roads_free_1 SET "name" = REGEXP_REPLACE("name", [^x00-x7F]+, " ")
CONTEXT:  PL/pgSQL function afri_terra_104(text) line 6 at EXECUTE
```

必须将正则表达式放在单引号和替换文本之间。因为这是一个动态查询,所以必须用双引号转义:

CREATE OR REPLACE FUNCTION public.function_104(param text)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN  
EXECUTE 'UPDATE public.' || quote_ident(param) || 
' SET "name" = REGEXP_REPLACE("name", ''[^x00-x7F]+'', '' '')';
END
$function$;

insert into t104(name) values('abcé');
INSERT 0 1
select function_104('t104');
function_104
--------------
(1 row)
select * from t104;
name
------
abc
(1 row)

最新更新