我需要通過 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
```
uj5u.com熱心網友回復:
您必須將正則運算式和替換文本放在單引號之間。由于它是一個動態查詢,您必須通過將它們加倍來轉義單引號:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/334439.html
標籤:正则表达式 PostgreSQL
