You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:36:05