PostgreSQL函数用正则移除非拉丁字符报语法错该如何解决
问题原因和修正方案
- 正则表达式模式未使用单引号包裹,导致SQL将
[识别为非法语法符号,这是你遇到语法报错的直接原因 - ASCII范围的十六进制写法错误,正确写法前缀为
\x而非直接写x - 动态拼接SQL的字符串内部,单引号需要用两个单引号转义,否则会打断外层SQL字符串的边界
- 缺少
g全局匹配标记,默认只会替换第一个匹配到的非拉丁字符串
修正后的函数代码
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]+'', '' '', ''g'')'; END $function$
补充说明
- 如果你需要直接删除非拉丁字符而非替换为空格,把替换参数
'' ''改为''''即可 quote_ident()的使用符合安全规范,可以有效避免SQL注入风险- 该正则匹配范围为标准ASCII 0-127的所有字符,仅保留基础拉丁字母、数字、半角符号,符合你移除中文、日文等非拉丁字符的需求
内容的提问来源于stack exchange,提问作者EricBHK
相关产品推荐
相关产品推荐

